【问题标题】:ElasticSearch api parse nested string json dashboardElasticSearch api 解析嵌套字符串 json 仪表板
【发布时间】:2015-08-23 16:20:18
【问题描述】:

我正在使用 ElasticSearch GET 来获取仪表板的 json 文件: 例如:http://ES_IP:9200/kibana-int/dashboard/my_Dashboard/

这会返回一个 json 文件,例如:

{"_index":"kibana-int","_type":"dashboard","_id":"my_Dashboard","_version":5,"found":true,"_source":{ "user":"guest", "group":"guest", "title":"my_Dashboard", "dashboard":"{ \"title\": \"My Dashboard\", \"services\": { \"query\": { \"list\": { \"0\": { \"id\": 0, \"type\": \"lucene\", \"query\": \"type:dh AND severity:ERROR AND (response.baseUrl:\"/rm/recordings/*\" OR request.baseUrl:\"/rm/recordings/*\")\", \"alias\": \"DH errors rcc\",.......

这是我需要你帮助的地方,我怎样才能获得键“仪表板”的值,但在键/val 对中没有转义的 '\' 字符不影响作为值一部分的转义符?

我需要的输出应该是这样的:

{ "title": "My Dashboard", "services": { "query": { "list": { "0": { "id": 0, "type": "lucene", "query": "type:dh AND severity:ERROR AND (response.baseUrl:\"/rm/recordings/*\" OR request.baseUrl:\"/rm/recordings/*\")", "alias": "DH errors rcc",.......

注意在查询键中,在它的值中,有一些\"不应该受到影响,因为它们是值的一部分。

我需要该输出,然后在我拥有的某个 bash 脚本中使用 jq 解析该 json。

ElasticSearch api 是否有一些过滤器来为我提供该输出? 或者你知道另一种外部方法来获得我需要的东西吗?

非常感谢您的帮助。

【问题讨论】:

    标签: json bash elasticsearch jq elasticsearch-api


    【解决方案1】:

    fromjson 是你的朋友。例如:

    def data: {
      "_index": "kibana-int",
      "_type": "dashboard",
      "_id": "my_Dashboard",
      "_version": 5,
      "found": true,
      "_source": {
        "user": "guest",
        "group": "guest",
        "title": "my_Dashboard",
        "dashboard": "{ \"title\": \"My Dashboard\", \"services\": { \"query\": { \"list\": { \"0\": \"foobar\" }}}}"
      }
    };
    
    data | ._source.dashboard | fromjson
    

    输出:

    $ jq -n -f elastic.jq
    {
      "title": "My Dashboard",
      "services": {
        "query": {
          "list": {
            "0": "foobar"
          }
        }
      }
    }
    

    【讨论】:

    • 感谢您的回答,但问题出在关键“查询”中,您可以在我的示例中看到它,其部分值已转义 \" 不应修改,因为它是值:\"/rm/recordings/*\" 不应修改。来自json的jq命令由于该问题而失败,因为它将其转换为“/rm/recordings/*”,这不应该发生那个案例。还有其他想法吗?非常感谢您的帮助。
    • (1) ES_IP:9200/kibana-int/dashboard/my_Dashboard 返回 ERR_NAME_NOT_RESOLVED; (2) 您的示例 JSON 被截断。 (3) 你认为 ES 返回的 JSON 字符串在某种意义上是不正确的吗?如果是这样,您能否解释一下“正确”的 JSON 应该是什么?
    猜你喜欢
    • 1970-01-01
    • 2016-02-21
    • 1970-01-01
    • 2019-03-31
    • 2022-01-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多