jq:用数组中值的索引替换字段

问题描述 投票:0回答:2

给定以下 JSON 文件:

{
  "quadrants": [
    "Languages + Frameworks",
    "Tools",
    "Platforms",
    "Techniques"
  ],
  "entries": [
    {
      "quadrant": "Languages + Frameworks"
    },
    {
      "quadrant": "Platforms"
    },
    {
      "quadrant": "Languages + Frameworks"
    }
  ]
}

如何将每个条目的象限字段替换为象限中对应值的索引?

预期输出:

{
  "quadrants": [
    "Languages + Frameworks",
    "Tools",
    "Platforms",
    "Techniques"
  ],
  "entries": [
    {
      "quadrant": 0
    },
    {
      "quadrant": 2
    },
    {
      "quadrant": 0
    }
  ]
}

我尝试了以下 jq 脚本,但每个象限都得到

null

jq '
  .entries |= map(
    .quadrant = (.quadrant as $q | (.quadrants | index($q)))
  )
' "$1"
json jq
2个回答
0
投票

您正在寻找这样的东西:

.quadrants as $qs | .entries[].quadrant |= . as $q | $qs | index($q)'

0
投票

假设您的

JSON data
存储在
jsoninput.json fil
中,因此在这种情况下,我们像给定的那样运行 jq 命令。

jq '.entries |= map(.quadrant = (.quadrants | index(.quadrant)))' jsoninput.json

上面命令中的

jsoninput.json
可以替换为你的文件名。

© www.soinside.com 2019 - 2024. All rights reserved.