Добавить данные в файл JSON с "JQ"

У меня есть файл "stats.json" со следующей исходной структурой "

[{
"price": 66.55,
"created": "2018-02-24T14:32:57"
}]

С помощью скрипта bash/curl я беру каждые 10 минут данные из API и сохраняю их в "temp.json"

{
"price": 88.55,
"created": "2018-02-24T15:32:57"
}

Я хотел бы объединить файл temp.json (который обновляется каждые 10 минут) и заполнить файл stats.json. Я пытался сделать это с "JQ", но безуспешно.

1 ответ

Один из способов добавить элемент в temp.obj в массив в stats.json:

jq —-slurpfile temp temp.obj '. + $temp' stats.json

По-другому:

jq —s '.[0] + [.[1]]' stats.json temp.json

(Если вы хотите перезаписать stats.json, то я бы предложил использовать sponge как показано ниже.)

Однако, если это вообще возможно, почти наверняка было бы лучше сохранить stats.json в качестве файла журнала в формате JSONL: http://jsonlines.org/

То есть каждый объект в файле temp.json будет добавлен в stats.json одной строкой:

jq -c temp.json >> stats.json

Это, конечно, предполагает, что stats.json изначально пуст или уже в формате JSONL. Чтобы преобразовать ваш существующий stats.json в JSONL, вы можете сделать что-то вроде этого:

cp -p stats.json stats.json.bak

jq -c .[] stats.json | sponge stats.json
Другие вопросы по тегам