zq和jq都能用于进行json的操作运算,选择是一个问题。考虑到效率问题,大的原则是:能用zq就先用zq,在zq完成不了的情况下再用jq。
- 速度:zq快
- 查询语言的友好性:zq更符合技术思维
- 中文key:jq支持,zq不支持
echo '{}' | zq -j 'a:=1' -
{"a":1}
echo '{}' | zq -j '"测试":=1' -
zq: error parsing Zed at column 9:
"测试":=1
=== ^ ===
echo '{}' | jq -c '.a=1'
{"a":1}
echo '{}' | jq -c '."测试"=1'
{"测试":1}
- 定义函数:jq支持,zq不支持
- ip解析函数:zq支持,jq不支持,比如ipv6地址的归一化处理,zq直接一个cast搞定:
echo '{"nips":["1.1.1.1","2405:57c0:0000:f000:0000:0000:0000:00b2","2405:57c0:0:f000::b3"]}' | zq -j 'nips:=(over nips | cast(this, <ip>))' -
{"nips":["1.1.1.1","2405:57c0:0:f000::b2","2405:57c0:0:f000::b3"]}
- 文档和问题解答:jq多,zq少