用jq解析json文件

时间:2020-04-14 20:16:30

标签: json shell parsing jq

{
   "name": "ford",
   "availableVersions": [
      {
         "version": 111,
         "count": 3
      },
      {
         "version": 122,
         "count": 2
      },
      {
         "version": 133,
         "count": 3
      },
      {
         "version": 144,
         "count": 1
      }
                          ],
       "RealVersion": 155


}
{
   "name": "bmw",
   "availableVersions": [
     {
         "version": 244,
         "count": 1
     },
     {
      "version": 255,
      "count": 3
     }                  ],
     "RealVersion": 120

    }

我现在有这个demo.json文件if (name == 'ford')(名称可以是变量),我想获取其count != 3的所有版本 并且如果所有版本的count == 3我都想要获得福特的RealVersion,那么在这种情况下输出应该是。

EXPECTED OUTPUT = [122 144 ] 我正在使用jq工具来解析json文件

现在,如果所有版本计数== 3

      {
   "name": "ford",
   "availableVersions": [
      {
         "version": 111,
         "count": 3
      },
      {
         "version": 122,
         "count": 3
      },
      {
         "version": 133,
         "count": 3
      },
      {
         "version": 144,
         "count": 3
      }
                          ],
       "RealVersion": 155


}
{
   "name": "bmw",
   "availableVersions": [
     {
         "version": 244,
         "count": 1
     },
     {
      "version": 255,
      "count": 3
     }                  ],
     "RealVersion": 120

    }

现在,在这种情况下,所有版本的计数都== 3,所以现在我想获得的实际版本是155 EXPECTED OUTPUT SHOULD BE 155

有人可以帮助我吗?

1 个答案:

答案 0 :(得分:0)

以下程序在与-n命令行选项一起调用时,在两种情况下均会产生预期的输出:

inputs
| .RealVersion as $RealVersion
| select(.name == "ford")
| .availableVersions
| map(select(.count != 3))
| if length > 0 then map(.version)
  else $RealVersion
  end

具体地说,在第一种情况下,它将生成一个JSON数组,在第二种情况下,它将生成.ReadVersion的实际值。