Разделить файл JSON на отдельные файлы
У меня есть большой JSON-файл, который является объектом объектов, который я хотел бы разделить на отдельные имена файлов после ключей объектов. Возможно ли достичь этого с помощью jq или любых других готовых инструментов?
исходный JSON имеет следующий формат
{ "item1": {...}, "item2": {...}, ...}
учитывая этот ввод, я хотел бы создать файлы item1.в JSON, место № 2.JSON и т. д.
2 ответов
Это должно дать вам начать:
for f in `cat input.json | jq -r 'keys[]'` ; do
cat input.json | jq ".$f" > $f.json
done
или когда вы настаиваете на более bashy синтаксисе, как некоторые, похоже, предпочитают:
for f in $(jq -r 'keys[]') ; do
jq ".[\"$f\"]" < input.json > "$f.json"
done < input.json
вот решение, которое требует только одного вызова jq:
jq -cr 'keys[] as $k | "\($k)\n\(.[$k])"' input.json |
while read -r key ; do
read -r item
printf "%s\n" "$item" > "/tmp/$key.json"
done
может быть быстрее передать выходные данные команды jq в awk, например:
jq -cr 'keys[] as $k | "\($k)\t\(.[$k])"' input.json |
awk -F\t '{ print > "/tmp/" ".json" }'
конечно, эти подходы должны быть изменены, если ключ содержит символы, которые нельзя использовать в именах файлов.