我可以写
> echo '{"a": "arbiter", "b": "brisk"}{"a": "astound", "b": "bistro"}' | jq '.a, .b'
"arbiter"
"brisk"
"astound"
"bistro"
Run Code Online (Sandbox Code Playgroud)
但如果我这样做
> echo '{"a": "arbiter", "b": "brisk", "c": ["cloak", "conceal"]} {"a": "astound", "b": "bistro", "c": ["confer", "consider"]}' | jq '.a, .b, .c'
Run Code Online (Sandbox Code Playgroud)
我明白了
"arbiter"
"brisk"
[
"cloak",
"conceal"
]
"astound"
"bistro"
[
"confer",
"consider"
]
Run Code Online (Sandbox Code Playgroud)
我如何压平c数组来代替
"arbiter"
"brisk"
"cloak",
"conceal"
"astound"
"bistro"
"confer",
"consider"
Run Code Online (Sandbox Code Playgroud)
更新
由于空安全在几种现代语言中非常流行(并且理所当然),因此可以适当地假设上面提出的问题是不完整的。有必要知道如何处理缺少值的情况。
如果其中一个值为null,
> echo '{"b": "brisk"}{"a": "astound", "b": "bistro"}' | jq '.a, .b' …Run Code Online (Sandbox Code Playgroud) jq的典型用法
jq [options] <jq filter> [file...]
Run Code Online (Sandbox Code Playgroud)
意味着,例如,要漂亮地打印一个文件,我们会写
jq -s '.' input.json output.json
Run Code Online (Sandbox Code Playgroud)
但随着程序的<filter>增长,将其作为成熟的程序存储在磁盘上会更干净。
我们可能想要这样做,因为:
最好的方法awk(对于 CSV 文件就像 jq 对于 JSON 文件一样)是保存带有.awk扩展名的文件,使其可执行并在第一行写入:
#!/usr/bin/awk -f
Run Code Online (Sandbox Code Playgroud)
或者
#!/opt/local/bin/gawk -f
Run Code Online (Sandbox Code Playgroud)
在磁盘上存储过滤器的好机制是什么jq?