Intereting Posts
использовать буферизацию строки, когда вывод трубопровода в файл Escape hash mark (#) в / etc / environment проблема с установкой дополнения для виртуальной машины Oracle в FreeBSD 10.2 Почему «wget -r -e robots = off http://ccachicago.org» не действует рекурсивно? Терминальные цвета для Vim Airline и Tmux Tmuxline php показывает только обычный текст Замена для крышки Как установить Exim с TLS на сервере с несколькими доменами? Создание нового раздела с разделенным для нового жесткого диска: при установке он намного меньше, чем ожидалось. Зачем? Файловая система-ACL (setfacl) Эквивалентна «mkdir -p» для рекурсивной обработки ACL Как получить две команды? Программа, запускаемая из udev, не может открыть окно сочетание клавиш работает в одном макете, а не в другом Выполнить как другой пользователь, который не является root Разрешить только чтение пользователю sftp в определенном каталоге

Разделить массив JSON на несколько файлов

У меня есть файл, который выглядит так:

[ { "billingAccountNumber": "x", "paymentResponseObject": { "uiErrorDipslayMessage": "", "transactionStatus": "S", "transactionDescription": "", "transactionCode": "", "confirmationNumber": "1" } }, { "billingAccountNumber": "y", "paymentResponseObject": { "uiErrorDipslayMessage": "", "transactionStatus": "S", "transactionDescription": "", "transactionCode": "", "confirmationNumber": "2" } }, { "billingAccountNumber": "z", "paymentResponseObject": { "uiErrorDipslayMessage": "", "transactionStatus": "S", "transactionDescription": "", "transactionCode": "", "confirmationNumber": "3" } } ] 

Данные выглядят не совсем так, и у меня более трех элементов. Из этих данных я хочу создать три файла: x.json , y.json и z.json . Я хочу, чтобы содержимое каждого из этих файлов было содержимым paymentResponseObject .

Есть ли способ сделать это с JQ? Я понял, как сделать это в awk, но это очень неуклюже, и я хочу иметь возможность повторить этот процесс с разными схемами. Я должен переписать 80% сценария awk для каждой схемы.

Из этой темы:

 jq -cr 'keys[] as $k | "\($k)\n\(.[$k])"' input.json | while read -r key; do fname=$(jq --raw-output ".[$key].billingAccountNumber" input.json) read -r item printf '%s\n' "$item" > "./$fname" done