Разделить файл 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" }'

конечно, эти подходы должны быть изменены, если ключ содержит символы, которые нельзя использовать в именах файлов.