使用" jq"

时间:2018-02-24 13:13:51

标签: json bash logging jq jsonlines

我有一个文件" 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 个答案:

答案 0 :(得分:3)

将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