首页 > 解决方案 > jq 命令解析无效的 JSON(数字用空格分隔)

问题描述

我认为它作为 JSON 无效。但是 jq 命令不会引发错误并对其进行解析。

那是什么意思?

$ echo '1 2 3' | jq .
1
2
3

( version : jq-1.5)

标签: jsonstreamjq

解决方案


jq手册页:

默认情况下,jq 从标准输入读取 JSON 实体流(包括数字和其他文字)。空格仅用于分隔实体,例如 1 和 2,以及 true 和 false。

在您的示例中, jq 解析1,它本身就是一个有效的 JSON 实体,然后继续解析2and 3。换句话说: jq 命令解析输入1 2 3,因为它恰好是由空格分隔的有效 JSON 实体。

如果您使用打印所有输入实体的数组的选项,--slurp您可以看到它将1和视为单独的实体:23

# separate entities:
$ echo '1 2 3' | jq --slurp
[
  1,
  2,
  3
]

# a single entity:
$ echo '"1 2 3"' | jq --slurp
[
  "1 2 3"
]

为了比较,以下输入将无法解析:

[1 2 3]
1, 2. 3

推荐阅读