根值的JSON路径字符串评估

时间:2018-10-25 16:28:21

标签: jsonpath json-path-expression

具有返回非常基本的json响应的服务:

{
    "methodresult": "error",
    "ErrorCode": 2,
    "ErrorCodeText": "format",
    "ErrorMessage": "Json parse exception at pos:171 msg:Expecting \"key\""
}

并且正在尝试使用JSONPath查询“ methodresult”值是否返回为“ error”。

根据我所看到的文档/示例,我希望它能起作用:

$[?(@.methodresult=="error")]

但是,基于我正在使用的验证器(https://jsonpath.curiousconcept.com/),没有看到任何布尔响应。

当尝试针对不在数组中的内容编写表达式时,我是否缺少某些内容?

2 个答案:

答案 0 :(得分:4)

在方括号中包含json响应,并且可以正常工作。

[{
"methodresult": "error",
"ErrorCode": 2,
"ErrorCodeText": "format",
"ErrorMessage": "Json parse exception at pos:171 msg:Expecting \"key\""
}]


$[?(@.methodresult=="error")].methodresult

结果:

[  
"error"
]

答案 1 :(得分:0)

不,我认为您没有丢失任何东西。

问题在于JSONPath缺乏真正的标准。这里有一些想法/建议(包括一些与JSON Pointer相关的想法/建议,多年来一直停留在“提议的标准”阶段),许多实现,并且它们在某些方面也有所不同,即使它们按理实施相同的建议(例如Stefan Goessner's one)。

例如,当使用Jayway JsonPath时,这些JSONPath表达式

$.[?(@.methodresult == 'error')]
 $[?(@.methodresult == 'error')]
 .[?(@.methodresult == 'error')]
  [?(@.methodresult == 'error')]

针对问题的输入JSON产生相同的结果:

{
    "methodresult": "error",
    "ErrorCode": 2,
    "ErrorCodeText": "format",
    "ErrorMessage": "Json parse exception at pos:171 msg:Expecting \"key\""
}

它们返回一个非空数组,该数组包含具有methodresult字段等于error的JSON对象。如果有人看看斯特凡·高斯纳(Stefan Goessner)的提议,那是可以预期的...

为给定的输入here(问题中提供的链接)或here(提供使用4种不同的实现方式运行给定的JSONPath表达式)尝试相同的表达式,结果将混合:解析失败,执行错误,数组为空,有时是预期的。

最重要的是,直到对JSONPath有了真正的 standard ,确保JSONPath表达式按预期工作的唯一方法是为 concrete 您将在应用程序中使用的JSONPath实现。