jq 处理格式不正确的 JSON 文件

jq 处理格式不正确的 JSON 文件

因此,我正在使用的程序将其数据转储到准 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。

相关内容