jq解析子数组中的元素

时间:2017-08-08 16:12:29

标签: json jq

需要解析以下密钥,其中包含zipcodes == 73707802。例如,需要搜索其中一个zipcodes为73707802的​​状态密钥和名称。如果我搜索73707802,则应返回所有名称和密钥(密钥名称zipcode)

12 abc 73707802
32 cde 73707802
99 xyz 73707802

提前致谢..

{
  "states": [
    {
      "key": "12",
      "name": "abc",
      "city": {
        "zipcodes": [
          73707802,
          71444504,
          72646331,
          73707802
        ]
      }
    },
    {
      "key": "32",
      "name": "cde",
      "city": {
        "zipcodes": [
          71444504,
          72646331,
          73707802
        ]
      }
    },
    {
      "key": "99",
      "name": "xyz",
      "city": {
        "zipcodes": [
          72754781,
          71444504,
          72646331,
          73707802
        ]
      }
    }
  ]
}

1 个答案:

答案 0 :(得分:2)

以下是使用选择索引-r--arg选项的解决方案。

  .states[]
| select(.city.zipcodes | index($zip|tonumber))
| "\(.key) \(.name) \($zip)"

请注意,在您的示例中,您只显示搜索到的zip,但如果您希望显示其他zipcodes,则可以更改最终格式字符串。

如果您将过滤器放在filter.jq中,并且您的数据位于data.json,则可以像这样运行:

$ jq -r --arg zip 73707802 -f filter.jq data.json
12 abc 73707802
32 cde 73707802
99 xyz 73707802