使用jq,如何将浅层对象数组的任意JSON编码转换为CSV?
这个网站上有大量的问答,涵盖了对字段进行硬编码的特定数据模型,但是这个问题的答案应该适用于任何JSON,唯一的限制是它是一个具有标量属性的对象数组(没有深/复/子对象,扁平化这些是另一个问题).结果应包含一个标题行,给出字段名称.将优先考虑保留第一个对象的字段顺序的答案,但这不是必需的.结果可以用双引号括起所有单元格,或者只包含那些需要引用的单元格(例如'a,b').
输入:
[
{"code": "NSW", "name": "New South Wales", "level":"state", "country": "AU"},
{"code": "AB", "name": "Alberta", "level":"province", "country": "CA"},
{"code": "ABD", "name": "Aberdeenshire", "level":"council area", "country": "GB"},
{"code": "AK", "name": "Alaska", "level":"state", "country": "US"}
]
Run Code Online (Sandbox Code Playgroud)
可能的输出:
code,name,level,country
NSW,New South Wales,state,AU
AB,Alberta,province,CA
ABD,Aberdeenshire,council area,GB
AK,Alaska,state,US
Run Code Online (Sandbox Code Playgroud)
可能的输出:
"code","name","level","country"
"NSW","New South Wales","state","AU"
"AB","Alberta","province","CA"
"ABD","Aberdeenshire","council area","GB"
"AK","Alaska","state","US"
Run Code Online (Sandbox Code Playgroud)输入:
[
{"name": "bang", "value": "!", "level": 0},
{"name": "letters", "value": "a,b,c", "level": 0},
{"name": "letters", "value": "x,y,z", "level": 1},
{"name": "bang", "value": …Run Code Online (Sandbox Code Playgroud)我有一个名为 temp.json 的 JSON 文件。
{
"users": [
{
"username": "jack",
"email": "jack@somewhere.com",
"total running apps": "1",
"api-mock-app": "0",
"flogo": "1",
"ipaas": "0",
"nodejs-app": "0"
},
{
"username": "jill",
"email": "jill@somewhere.com",
"total running apps": "1",
"api-mock-app": "0",
"flogo": "1",
"ipaas": "0",
"nodejs-app": "0"
}
]
}
Run Code Online (Sandbox Code Playgroud)
我想把这个 JSON 转换成 CSV 像这样,
username email total running apps api-mock-app flogo ipaas nodejs-app
jack jack@somewhere.com 1 0 1 0 0
jill jill@somewhere.com 1 0 1 0 0
Run Code Online (Sandbox Code Playgroud)
我试过这个
jq -r '.users[] | keys[0] …Run Code Online (Sandbox Code Playgroud)