用于匹配子值的 JSONPath

时间:2021-05-12 12:41:48

标签: jsonpath

我花了很多时间试图弄清楚如何编写符合我需要的 json 路径,但没有成功。 我希望有人能够帮助我。

我有一个非常简单的 JSON 对象,它看起来像:{"code":..., "message":...},注意这不是一个对象列表

我试图找到一个 JSON 路径,当代码 > 100 时返回 [%code%],否则返回 []。

我发现 $[?(@.code > 100)].code 适用于 Jayway & Gatling 实现,但不适用于 Nebahle 和 Goessner 实现(根据 http://jsonpath.herokuapp.com/)。

遗憾的是,我正在从事的项目正在使用带有 Goessner 实现的 jsonpath 库。 有没有人知道可以用于任何实现的 jsonpath 的想法?

谢谢!

1 个答案:

答案 0 :(得分:0)

在将过滤器表达式应用于 JSON 对象的不同 JSONPath 实现之间没有达成一致。有些将其应用于对象本身(例如 Jayway),有些将其应用于 JSON 对象的每个值(例如 Goessner Javascript),而有些似乎根本不支持它(例如 Goessner PHP)。 Christoph Burgmer 的 JSONPath 比较报告了这些差异 here

在你的情况下,假设 Goessner Javascript,你可能能够逃脱

$[?(@>100)]                               (1)

或者更安全

$[?(typeof(@) == 'number' && @ > 100)]    (2)

例如,给定 {"code":101, "message":"101"},(1) 产生

[101,"101"]

while (2) 产生

[101]

(根据http://jsonpath.herokuapp.com/)。