![使用 JQ 将数组的 JSON 转换为带有标头的 CSV](https://linux22.com/image/166758/%E4%BD%BF%E7%94%A8%20JQ%20%E5%B0%86%E6%95%B0%E7%BB%84%E7%9A%84%20JSON%20%E8%BD%AC%E6%8D%A2%E4%B8%BA%E5%B8%A6%E6%9C%89%E6%A0%87%E5%A4%B4%E7%9A%84%20CSV.png)
我得到 Json 作为列 ID 和数组 -
{
"ObjectID": [
0,
1,
2,
3,
4
],
"Name": [
"Apple",
"Orange",
"Grape",
"Banana",
"Jackfruit"
],
"Color": [
"Red",
"Orange",
"Green",
"Yellow",
"null"
],
"Acidity": [
3.9,
3.5,
2.99,
6,
5.0
]
}
我正在尝试使用 jq 将其转换为纯 CSV 格式,例如 -
ObjectID,Name,Color,Acidity
0,Apple,Red,3.9
1,Orange,Orange,3.5
2,Grape,Green,2.99
3,Banana,Yellow,6
4,Jackfruit,null,5.0
相关问题使用 JQ 将 JSON 导出为带有标头的 CSV 。最好寻找通用答案。
答案1
在玩完给定的答案后回答我自己的问题,json 数组的通用解决方案
jq --raw-output 'to_entries|map(.key),(map(.value)|transpose[])|@csv'
答案2
使用该函数的解决方案transpose
:
<file jq -r '(to_entries|map(.key)),([.ObjectID,.Name,.Color,.Acidity]|transpose|.[])|@csv'
使用 提取对象名称to_entries|map(.key)
。
对象内容放入数组和transpose
d 中,以便获取包含每个对象元素的数组。
然后,结果将通过@csv
运算符将数组转换为逗号分隔的字符串。