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