【问题标题】:parsing Json data with jq用jq解析Json数据
【发布时间】:2017-06-07 09:44:05
【问题描述】:

在使用 jq 解析 Json 数据时需要帮助,我曾经使用 json 路径作为 [?(@.type=='router')].externalIP 来解析数据。我不知道如何使用 jq 来做同样的事情。

查询结果应提供来自 type=router 的 .externalIp。 198.22.66.99

json数据sn-p如下

[
  {
    "externalHostName": "localhost",
    "externalIP": "198.22.66.99",
    "internalHostName": "localhost",
    "isUp": true,
    "pod": "gateway",
    "reachable": true,
    "region": "dc-1",
     "type": [
      "router"
    ],
    "uUID": "b5f986fe-982e-47ae-8260-8a3662f25fc2"
  },
  ]

##

【问题讨论】:

  • 我用 json 路径查询作为 [?(@.type=='router')].externalIP 我不知道如何对 jq 做同样的事情。
  • 将此添加到您的问题中。还要检查如何创建mvce。无需发布 100 行 json 来演示问题..
  • 注意了,我的错!
  • 继续并更改问题。你可以edit

标签: json jq


【解决方案1】:
cat your-data.json | jq '.[]|.externalIP|select(type=="string")'
"198.22.66.99"
"192.22.66.29"
"192.22.66.89"
"192.66.22.79"

解释:

.[]                   | .externalIP            | select(type=="string")    
for every array entry | get field 'externalIP' | drop nulls

EDIT/ADDENDUM:过滤类型(期望路由器在类型数组的索引 0 上)

cat x | jq '.[]|select(.type[0] == "router")|.externalIP'
"198.22.66.99"
"192.22.66.89"

【讨论】:

  • 谢谢,我只想提取数组“type”的外部IP:[“router”],。结果输出应该只包含 198.22.66.99 192.22.66.89。
【解决方案2】:

描述:

我只想提取数组“type”的外部IP:[“router”]

对应的jq查询为:

.[] | select(.type==["router"]) | .externalIP

根据“路由器”是否属于指定类型进行查询:

.[] | select(.type|index("router")) | .externalIP

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-11-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多