Добавить данные в файл 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