Использование jq для объединения директории JSON файлов - PullRequest
1 голос
/ 23 апреля 2020

У меня есть каталог из примерно 100 JSON файлов, каждый из которых представляет собой массив из 100 простых записей, которые я хочу объединить в один файл для включения в качестве данных c в приложении, поэтому мне не нужно совершать повторные вызовы API для извлечения мелких кусочков (Я могу загружать только 100 записей за раз; поэтому у меня есть 100 коротких файлов.)

Вот пример файла, сокращенный до двух записей для отображения здесь:

[
 {
   "id": 11531,
   "title": "category 1",
   "count": 5
 },
 {
   "id": 11532,
   "title": "category 2",
   "count": 5
 }
]

Мои исследования привели к решению, которое работает, но только для двух файлов с двумя записями в каждом:

jq -s '.[0] + .[1]' file1.json file2.json > output.json

Этот источник также предположил, что эта строка будет работать для обработки каталога (только сейчас в нем два файла):

jq -s 'reduce .[] as $item ({}; . * $item)' json_files/* > output.json

но я получаю сообщение об ошибке:

jq: error (at json_files/categories-11-20.json:0): object ({}) and array ([{"id":1153...) cannot be multiplied

Я подумал, что, возможно, проблема заключалась в * попытке умножения, поэтому я попытался + в этом месте, но я получаю сообщение ... cannot be added..

Есть ли способ сделать это через JQ или есть лучший инструмент?

1 Ответ

3 голосов
/ 23 апреля 2020

Самый простой и вполне разумный подход - использовать параметр командной строки -s и add в следующих строках:

jq -s add json_files/* 

Конечно, вы можете sh указать список файлов по-разному. Порядок, в котором они указаны, также имеет значение.

Примечания:

...