使用 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 对的数组创建一个对象,可以通过相应地 mapping 输入对象的 Objects 数组来生成。

.Objects | map({key: .ElementName, value: .ElementArray}) | from_entries
{
  "Test1": [
    "abc",
    "bcd"
  ],
  "Test2": [
    "abc",
    "bcde"
  ]
}

Demo

演示

https://jqplay.org/s/YbjICOd8EJ

您也可以使用reduce

reduce .Objects[] as $o ({}; .[$o.ElementName]=$o.ElementArray)