首页 > 解决方案 > 用jq解析json文件

问题描述

{
   "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

谁能帮我这个?

标签: jsonshellparsingjq

解决方案


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

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

具体来说,在第一种情况下,它会生成一个 JSON 数组,在第二种情况下,会生成.ReadVersion.


推荐阅读