【问题标题】:Parse and Map 2 Arrays with jq使用 jq 解析和映射 2 个数组
【发布时间】:2019-12-20 00:09:34
【问题描述】:

我正在使用类似于以下的 JSON 文件:

{   "Response" : {
    "TimeUnit" : [ 1576126800000 ],
    "metaData" : {
      "errors" : [ ],
      "notices" : [ "query served by:1"]
    },
    "stats" : {
      "data" : [ {
        "identifier" : {
          "names" : [ "apiproxy", "response_status_code", "target_response_code", "target_ip" ],
          "values" : [ "IO", "502", "502", "7.1.143.6" ]
        },
        "metric" : [ {
          "env" : "dev",
          "name" : "sum(message_count)",
          "values" : [ 0.0]
        } ]
      } ]
    }   } }

我的目标是显示标识符和值的映射,例如:

apiproxy=IO
response_status_code=502
target_response_code=502 
target_ip=7.1.143.6

我已经能够使用

解析名称和值

.[].stats.data[] | (.identifier.names[]).[].stats.data[] | (.identifier.values[])

但我需要 jq 映射值的方法的帮助。

【问题讨论】:

    标签: json jq


    【解决方案1】:

    整个事情都可以在 jq 中使用 -r 命令行选项来完成:

    .[].stats.data[]
    | [.identifier.names, .identifier.values]
    | transpose[]
    | "\(.[0])=\(.[1])"
    

    【讨论】:

    • 看起来不错,你能解释一下去掉引号的地方吗?假设我想要报价,我该怎么办?这个位“(.[0])=(.[1])”
    • 如果你想要最外层的引号,省略 -r 命令行选项。关于 jq 程序的最后一行,请参阅 stedolan.github.io/jq/manual 的 jq 文档中的“字符串插值”。如果您想在其他地方使用引号,请注意您可以在字符串中包含转义的双引号。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-01-02
    • 2020-06-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多