【发布时间】:2016-01-02 19:59:39
【问题描述】:
使用jq,如何将任意JSON编码的浅对象数组转换为CSV?
这个网站上有很多问答,涵盖了对字段进行硬编码的特定数据模型,但是对于任何 JSON,这个问题的答案都应该有效,唯一的限制是它是一个具有标量属性的对象数组(没有深度/complex/sub-objects,因为展平这些是另一个问题)。结果应包含给出字段名称的标题行。将优先考虑保留第一个对象的字段顺序的答案,但这不是必需的。结果可以用双引号将所有单元格括起来,或仅将需要引用的单元格括起来(例如'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"} ]可能的输出:
code,name,level,country NSW,New South Wales,state,AU AB,Alberta,province,CA ABD,Aberdeenshire,council area,GB AK,Alaska,state,US可能的输出:
"code","name","level","country" "NSW","New South Wales","state","AU" "AB","Alberta","province","CA" "ABD","Aberdeenshire","council area","GB" "AK","Alaska","state","US" -
输入:
[ {"name": "bang", "value": "!", "level": 0}, {"name": "letters", "value": "a,b,c", "level": 0}, {"name": "letters", "value": "x,y,z", "level": 1}, {"name": "bang", "value": "\"!\"", "level": 1} ]可能的输出:
name,value,level bang,!,0 letters,"a,b,c",0 letters,"x,y,z",1 bang,"""!""",0可能的输出:
"name","value","level" "bang","!","0" "letters","a,b,c","0" "letters","x,y,z","1" "bang","""!""","1"
【问题讨论】:
-
三年多后...一个通用的
json2csv位于stackoverflow.com/questions/57242240/… -
晚会 ;) 这是另一个允许反向转换的通用解决方案:stackoverflow.com/questions/69230818/…