因此,我正在使用的程序将其数据转储到准 JSON 中,如下所示:
{"id": "A0001", "weight": 10.5, "category": "A"}
{"id": "A0002", "weight": 8.0, "category": "A"}
{"id": "A0001", "weight": 22.3, "category": "B"}
如你所见,它有 JSON 字典每行而不是包装在列表中。
能jq
处理这种格式错误的 JSON 吗?
答案1
jq
不会将此无效 JSON 视为多个独立但串联的 JSON 文档。默认情况下,每个 JSON 文档将通过各自的过滤器进行传输。因此
jq '.id' input.json
还将返回三个独立的输出:
"A0001"
"A0002"
"A0001"
但是,您可以使用-s
或--slurp
将所有这些包装到顶级数组中,并将其作为一个输入进行处理。所以
jq --slurp 'map(.id)' input.json
将返回
[
"A0001",
"A0002",
"A0001"
]
答案2
无需 jq 即可完成,只需使用 unix cli 即可:
bash $ echo [ $(<file.json paste -s -d, -) ]
[ {"id": "A0001", "weight": 10.5, "category": "A"},{"id": "A0002", "weight": 8.0, "category": "A"},{"id": "A0001", "weight": 22.3, "category": "B"} ]
bash $
结果输出是有效的 JSON。