короткий ответ
вариант A: in2csv
(csvkit) + csvtool
- заключите ваш json в скобки
- используйте опцию
in2csv
-I
, чтобы избежать непредвиденного поведения - используйте команду для транспонирования двухстрочного CSV, например csvtool
echo "[$the_json]" | in2csv -I -f json | csvtool transpose -
вариант B: используйте jq
вместо
Это решение с использованием только jq
: (https://stedolan.github.io/jq/)
echo "$the_json" | jq -r 'to_entries[] | [.key, .value] | @csv'
взято из Как сопоставить объект массивам, чтобы его можно было преобразовать в csv?
длинный ответ (csvkit + csvtool)
вход
in2csv -f json
ожидает список объектов JSON, поэтому вам нужно заключить один объект ({...}
) в квадратные скобки ([{...}]
).
На POSIX-совместимыхshells, напишите
echo "[$the_json]"
, которая напечатает
[{
"whatever": 2342,
"otherwise": 119,
"and": 1,
"so": 2,
"on": 3
}]
команду csvkit
Вы можете передать вышеприведенные данные непосредственно в in2csv
. Однако вы можете запуститьв проблемы с « выводом типа » (данные CSVrpretation) функция csvkit:
<b>$ echo "[$the_json]" | in2csv -f json</b>
whatever,otherwise,and,so,on
2342,119,True,2,3
1
стала True
.Для получения дополнительной информации см. Часть Советы и устранение неисправностей .Рекомендуется отключить вывод типа с помощью опции -I
:
<b>$ echo "[$the_json]" | in2csv -I -f json</b>
whatever,otherwise,and,so,on
2342,119,1,2,3
Теперь результат, как и ожидалось
транспонировать данные
Тем не менее, вам нужно транспонировать данные.Документация csvkit скажем :
Для транспонирования CSV рассмотрим csvtool .
(csvtool
доступно на github , opam , debian и, возможно, другие каналы распространения.)
Используя csvkit + csvtool, ваша последняя команда выглядит следующим образом:
echo "[$the_json]" | in2csv -I -f json | csvtool transpose -
с дефисом (-
), означающим получение данных из stdin
.Вот результат:
whatever,2342
otherwise,119
and,1
so,2
on,3
вот и все.
Я думаю, что нет единого решения с только csvtool
, вам понадобится in2csv
.Однако вместо этого вы можете использовать jq
, см. Краткий ответ.
FTR, я использую версию csvkit 1.0.3 .