首页 > 解决方案 > 使用 jq 专门处理空 JSON 数组

问题描述

我想要第一个状态为 0 的命令退出而不打印任何内容。第二条命令的输出和状态应该如图所示。有人可以告诉我如何修改jq_expr以实现这一目标吗?-e(应保留该选项。)

$ jq_expr='.value | .[] | [.x] | @tsv'
$ jq -e -r "$jq_expr" <<< '{"value": []}' || echo "$?" # I just want this one to exit with 0 instead of 4.
4
$ jq -e -r "$jq_expr" <<< '{"value": [{"x":42}]}' || echo "$?"
42

标签: jqexit-codeempty-list

解决方案


[这是对原始问题的回应,其中 jq 的第一次调用被赋予了准 JSON 值:{"value": [{x:1}]}.]

该表达式{"value": [{x:1}]}不是有效的 JSON,因此如果它被视为有效 JSON,则抑制错误消息的唯一方法是将其重定向到/dev/null. (jq 的异常处理机制不能用于捕获此类语法错误。)

有多种工具(包括 jq 本身)可以将此类准 JSON 字符串转换为 JSON,因此您可能想利用其中的一种。例如,考虑:

$ jq -nc -f <(echo '{"value": [{x:1}]}')
{"value":[{"x":1}]}

推荐阅读