首页 > 解决方案 > JQ:将json数组中的位置添加到元素中

问题描述

我实际上通过 API 接收到一个 json,其中包含几个具有不同信息的数组。其中两个阵列是间接链接的。数组 1 包含一个引用数组 2 中元素的数组位置的元素。我实际上正在转换该 json 以适应请求的要求并将其移动到数据库中。稍后需要在数据库中链接两个阵列的信息。所以我的想法是将一个具有数组位置的元素添加到数组2中。

例子:

原始数组一:

{
  "country": [
    {
      "ContinentCode": "EU",
      "ContinentGroup": 1,
      "CountryCode": "DE",
      "CountryName": "Germany",
      "CurrencyIndex": 1
    },
    {
      "ContinentCode": "AM",
      "ContinentGroup": 2,
      "CountryCode": "CA",
      "CountryName": "Canada",
      "CurrencyIndex": 2
    }
  ]
}

数组原二:

{
  "currency": [
    {
      "CODE": "EUR",
      "Name": "Euro"
    },
    {
      "Code": "CAD",
      "Name": "Canadian Dollar"
    }
  ]
}

新数组思路二:

{
  "currency": [
    {
      "CODE": "EUR",
      "Name": "Euro",
      "Position": 1
    },
    {
      "Code": "CAD",
      "Name": "Canadian Dollar",
      "Position": 2
    }
  ]
}

我在 Windows 环境下使用 jq 1.5。我查看了手册,但发现没有内置功能可以将数组位置添加到元素中。有任何想法吗?

问候蒂莫

标签: arraysjsonjq

解决方案


要将数组索引添加到 arr2.json 中的数组元素,您可以使用reduce

jq -f program.jq arr2.json

其中 program.jq 包含:

.currency |= reduce range(0;length) as $i (.; .[$i].Position = 1+$i)

或者,假设您在 Windows 环境中:

jq ".currency |= reduce range(0;length) as $i (.; .[$i].Position = 1+$i)" arr2.json

推荐阅读