JQ:将json数组中的位置添加到元素

时间:2018-10-09 08:38:39

标签: arrays json jq

我实际上通过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。我看了一下手册,但是发现没有内置的功能将数组位置添加到元素中。有什么想法吗?

致谢 蒂莫

2 个答案:

答案 0 :(得分:1)

要将数组索引添加到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

答案 1 :(得分:0)

这是您要求的示例代码,请运行代码段并检查您的要求

var json1 ="{\"country\": [ { \"ContinentCode\": \"EU\", \"ContinentGroup\": 1, \"CountryCode\": \"DE\", \"CountryName\": \"Germany\", \"CurrencyIndex\" : 1}, { \"ContinentCode\": \"AM\", \"ContinentGroup\": 2, \"CountryCode\": \"CA\", \"CountryName\": \"Canada\", \"CurrencyIndex\" : 2}]}";
var json2 = "{\"currency\": [ { \"Code\": \"EUR\", \"Name\": \"Euro\" }, { \"Code\": \"CAD\", \"Name\": \"Canadian Dollar\" }]}";
        
var jsonParsed1 = JSON.parse(json1);
var jsonParsed2 = JSON.parse(json2);

var json3 = [];
for(var i=0;i<jsonParsed1.country.length;i++){
  var json3Object = {"Code":jsonParsed2.currency[i].Code,"Name":jsonParsed2.currency[i].Name,"Position":i+1};
  json3.push(json3Object);
}
console.log(json3);
告诉我它是否对您有帮助