带有多个可能值的json-rpc响应jq过滤

问题描述 投票:2回答:2

无法确定如何过滤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"
}

我可以单独访问它们两个,但不知道如何获得'或'功能

$ ./reqok | jq .result
"0001"
$ ./reqbad | jq .error.data.message
"'NoneType' object is not subscriptable"
json jq json-rpc
2个回答
2
投票

jq中,您可以使用备用运算符//,该运算符可用于返回默认值。例如。如果a // b产生除aa以外的结果,则形式为false的过滤器将产生与null相同的结果。否则,a // b会产生与b相同的结果。

也可用于提供默认值:如果输入中没有.foo // 1元素,则1的取值为.foo。>

jq '.result? // .error.data.message?'

请注意,当.result的值不是nullfalse时,这将[[仅

起作用,在这种情况下,执行也会变为备用条件。

1
投票
[在两种情况下,结果都是一个JSON对象,因此可以通过检查对象是否具有“错误”键来避免使用//出现的null / false问题,如下所示:
© www.soinside.com 2019 - 2024. All rights reserved.