用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个回答
1
投票

您正在寻找这样的东西:

.quadrants as $l | .entries[].quadrant |= . as $e | $l | index($e)

1
投票

您还可以使用双括号来查找索引:

.quadrants as $q | .entries[].quadrant |= $q[[.]][]

演示

如果象限数组中的项目可能出现多次,请使用

first($q[[.]][])
代替。

对于包含许多可能昂贵的搜索的大型输入,您可以事先创建一个查找

INDEX
,然后高效地查询:

(.quadrants | to_entries | INDEX(.value)) as $i | .entries[].quadrant |= $i[.].key

演示

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