例如,我的jq
命令可能会出现这样的内容:
"some string"
"some thing"
"some ping"
...
请注意,项目之间没有外部对象或数组,也没有逗号。
或者你可能有类似的东西:
["some string"
"some thing"
"some ping"]
["some wing"
"some bling"
"some fing"]
但同样,没有逗号或外部对象或数组,并且它们之间没有逗号来表示这是JSON。
我一直在想答案是它被称为“原始”,但我对此不确定。
我特意在文档中寻找一个可以处理上述各种示例的术语,但我不知道如何继续。
答案 0 :(得分:1)
首先,jq manual.yml以这种方式描述了过滤器的行为:
有些过滤器产生多个结果,例如有一个过滤器 生成其输入数组的所有元素。管道那个过滤器 进入第二个运行第二个过滤器的每个元素 阵列。通常,可以通过循环和迭代完成的事情 在其他语言中只需将过滤器粘合在一起即可完成。
重要的是要记住每个过滤器都有一个输入和一个 输出。甚至像“你好”或42这样的文字都是过滤器 - 它们需要一个 输入但总是产生与输出相同的文字。操作 结合两个过滤器,如添加,通常输入相同的输入 两者并结合结果。因此,您可以实现平均 过滤为
add / length
- 将输入数组提供给add
过滤和length
过滤器然后执行除法。
同样重要的是要记住,jq的默认行为是为每个JSON对象运行一次指定的过滤器。在下面的示例中,jq每次运行一次标识过滤器四次:
$ (echo 2;echo {}; echo []; echo 3) | jq .
2
{}
[]
3
这里发生的事情类似于
$ jq -n '2, {}, [], 3 | .'
2
{}
[]
3
由于这并不总是您想要的,-s
选项可用于告诉jq将单独的值收集到数组中并将其提供给过滤器:
$ (echo 2;echo {}; echo []; echo 3)| jq -s .
[
2,
{},
[],
3
]
类似于
$ jq -n '[2, {}, [], 3] | .'
[
2,
{},
[],
3
]
jq manual.yml解释了如何包含--raw-input
/ -R
选项,以便更好地控制输入处理:
不要将输入解析为JSON。相反,每行文本都作为字符串传递给过滤器。如果与
--slurp
结合使用,则整个输入将作为单个长字符串传递给过滤器。
您可以看到在此示例中使用-s
和-R
选项会产生不同的结果:
$ (echo 2;echo {}; echo []; echo 3)| jq -s -R .
"2\n{}\n[]\n3\n"