使用 jq 解析 json 对象数组
Parse an array of json object using jq
我正在尝试解析下面的 json 文件并将结果存储到另一个 json 文件中。我该如何实现?
{
"Objects": [
{
"ElementName": "Test1",
"ElementArray": ["abc","bcd"],
"ElementUnit": "4"
},
{
"ElementName": "Test2",
"ElementArray": ["abc","bcde"],
"ElementUnit": "8"
}
]
}
预期结果:
{
"Test1" :[
"abc","bcd"
],
"Test2" :[
"abc","bcde"
]
}
我已经尝试了以下几行,但我似乎偏离了 -
jq '[.Objects[].ElementName ,(.Objects[]. ElementArray[])]' user1.json
jq ".Objects[].ElementName .Objects[].ElementArray" ruser1.json
您的预期输出需要用大括号括起来才能成为有效的 JSON 对象。也就是说,使用 from_entries
从 key-value 对的数组创建一个对象,可以通过相应地 map
ping 输入对象的 Objects
数组来生成。
.Objects | map({key: .ElementName, value: .ElementArray}) | from_entries
{
"Test1": [
"abc",
"bcd"
],
"Test2": [
"abc",
"bcde"
]
}
演示
https://jqplay.org/s/YbjICOd8EJ
您也可以使用reduce
reduce .Objects[] as $o ({}; .[$o.ElementName]=$o.ElementArray)
我正在尝试解析下面的 json 文件并将结果存储到另一个 json 文件中。我该如何实现?
{
"Objects": [
{
"ElementName": "Test1",
"ElementArray": ["abc","bcd"],
"ElementUnit": "4"
},
{
"ElementName": "Test2",
"ElementArray": ["abc","bcde"],
"ElementUnit": "8"
}
]
}
预期结果:
{
"Test1" :[
"abc","bcd"
],
"Test2" :[
"abc","bcde"
]
}
我已经尝试了以下几行,但我似乎偏离了 -
jq '[.Objects[].ElementName ,(.Objects[]. ElementArray[])]' user1.json
jq ".Objects[].ElementName .Objects[].ElementArray" ruser1.json
您的预期输出需要用大括号括起来才能成为有效的 JSON 对象。也就是说,使用 from_entries
从 key-value 对的数组创建一个对象,可以通过相应地 map
ping 输入对象的 Objects
数组来生成。
.Objects | map({key: .ElementName, value: .ElementArray}) | from_entries
{
"Test1": [
"abc",
"bcd"
],
"Test2": [
"abc",
"bcde"
]
}
演示
https://jqplay.org/s/YbjICOd8EJ
您也可以使用reduce
reduce .Objects[] as $o ({}; .[$o.ElementName]=$o.ElementArray)