Используя jq, как можно преобразовать произвольный JSON-массив из мелких объектов в CSV?
Есть много Q & Как на этом сайте, который охватывает конкретные модели данных, которые жестко кодируют поля, но ответы на этот вопрос должны работать с любым JSON, единственным ограничением которого является массив объектов со скалярными свойствами ( нет глубоких/сложных/под-объектов, как уплощение, это еще один вопрос). Результат должен содержать строку заголовка, дающую имена полей. Предпочтение будет отдаваться ответам, которые сохраняют порядок полей первого объекта, но это не требование. Результаты могут заключать все ячейки с двойными кавычками или заключать только те, которые требуют цитирования (например, "a, b" ).
Примеры
-
Input:
[ {"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"
-
Input:
[ {"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"