JQ重塑嵌套数组

JQ reshape nested array

我对 jq 和嵌套数组有疑问,我不明白为什么它要创建多个对象:

echo '{
    "first": [
        {
            "second": {
                "id": 1,
                "third": [
                    {
                        "value": "aa"
                    },
                    {
                        "value": "bb"
                    }
                ]
            }
        }
    ]
}' | jq '.first[].second | {id: .id, prop: .third[].value}'

这是返回:

{
  "id": 1,
  "prop": "aa"
}
{
  "id": 1,
  "prop": "bb"
}

但我想要:

{
  "id": 1,
  "prop": ["aa", "bb"]
}

我错过了什么?

您需要将值放入数组中:

jq '.first[].second | {id: .id, prop: [.third[].value]}'

使用 map 内置函数将数组转换为 .values:

jq '.first[].second | {id: .id, prop: .third | map(.value)}'
{
  "id": 1,
  "prop": [
    "aa",
    "bb"
  ]
}

Demo