[英]JQ: add the position in the json array to the element
我实际上通过 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。 我查看了手册,但发现没有内置功能可以将数组位置添加到元素中。 有任何想法吗?
问候蒂莫
要将数组索引添加到 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
这是您的要求的示例代码,请运行代码片段并检查您的要求
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);
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.