具有返回非常基本的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/),没有看到任何布尔响应。
当尝试针对不在数组中的内容编写表达式时,我是否缺少某些内容?
答案 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实现。