json-rpc response jq filtering with multiple possible values
json-rpc response jq filtering with multiple possible values
不知道如何过滤 jq 输出以仅显示来自 json-rpc 响应的结果或错误消息。示例响应如下所示:
正常:
{
"result": "0001",
"id": 1,
"jsonrpc": "2.0"
}
错误:
{
"error": {
"code": -32000,
"message": "Server error",
"data": {
"type": "TypeError",
"args": [
"'NoneType' object is not subscriptable"
],
"message": "'NoneType' object is not subscriptable"
}
},
"id": 1,
"jsonrpc": "2.0"
}
我可以单独访问它们,但不知道如何获得 'or' 功能
$ ./reqok | jq .result
"0001"
$ ./reqbad | jq .error.data.message
"'NoneType' object is not subscriptable"
在 jq
中,您可以使用可用于 return 默认值的备用运算符 //
。例如。 a // b
形式的过滤器产生与 a
相同的结果,如果 a
产生 false
和 null
以外的结果。否则,a // b
产生与 b
.
相同的结果
对于提供默认值也很有用:如果输入中没有 .foo
元素,.foo // 1
将计算为 1
。
jq '.result? // .error.data.message?'
请注意,当 .result
的值不是 null
或 false
时,这将 仅 起作用,在这种情况下执行进入替代条件。
在这两种情况下,结果都是 JSON 对象,因此您可以通过检查对象是否具有 "error" 键来避免使用 // 出现的 null/false 问题,沿着:
if has("error") then ... else ... end
当然这个方法也可以结合使用//
和?
等
不知道如何过滤 jq 输出以仅显示来自 json-rpc 响应的结果或错误消息。示例响应如下所示:
正常:
{
"result": "0001",
"id": 1,
"jsonrpc": "2.0"
}
错误:
{
"error": {
"code": -32000,
"message": "Server error",
"data": {
"type": "TypeError",
"args": [
"'NoneType' object is not subscriptable"
],
"message": "'NoneType' object is not subscriptable"
}
},
"id": 1,
"jsonrpc": "2.0"
}
我可以单独访问它们,但不知道如何获得 'or' 功能
$ ./reqok | jq .result
"0001"
$ ./reqbad | jq .error.data.message
"'NoneType' object is not subscriptable"
在 jq
中,您可以使用可用于 return 默认值的备用运算符 //
。例如。 a // b
形式的过滤器产生与 a
相同的结果,如果 a
产生 false
和 null
以外的结果。否则,a // b
产生与 b
.
对于提供默认值也很有用:如果输入中没有 .foo
元素,.foo // 1
将计算为 1
。
jq '.result? // .error.data.message?'
请注意,当 .result
的值不是 null
或 false
时,这将 仅 起作用,在这种情况下执行进入替代条件。
在这两种情况下,结果都是 JSON 对象,因此您可以通过检查对象是否具有 "error" 键来避免使用 // 出现的 null/false 问题,沿着:
if has("error") then ... else ... end
当然这个方法也可以结合使用//
和?
等