如何使用jq将JSON输入的哈希数组的哈希转换为CSV



我想转换存储在input.JSON 文件中的以下JSON内容

{
"results": [
[
{
"field": "field1",
"value": "value1-1"
},
{
"field": "field2",
"value": "value1-2"
},
{
"field": "field3",
"value": "value1-3"
}
],
[
{
"field": "field1",
"value": "value2-1"
},
{
"field": "field2",
"value": "value2-2"
},
{
"field": "field3",
"value": "value2-3"
}
],
[
{
"field": "field1",
"value": "value3-1"
},
{
"field": "field2",
"value": "value3-2"
},
{
"field": "field3",
"value": "value3-3"
}
]
]
}

转换为CSV输出

"field1","field2","field3"
"value1-1","value1-2","value1-3"
"value2-1","value2-2","value2-3"
"value3-1","value3-2","value3-3"

我想到的最接近jq的表达式是:

$ cat input.json | jq -r '.results | .[] | map(.field), map(.value) | @csv'
"field1","field2","field3"
"value1-1","value1-2","value1-3"
"field1","field2","field3"
"value2-1","value2-2","value2-3"
"field1","field2","field3"
"value3-1","value3-2","value3-3"

这仍然是不正确的。我应该如何编写jq表达式以获得所需的CSV输出?

您正在将.[]馈送到map(.field)map(.value)中。

仅对first项目使用map(.field),对所有项目.[]:使用map(.value)

jq -r '.results | (first | map(.field)), (.[] | map(.value)) | @csv' input.json 

演示

最新更新