我已经浏览了大部分 JSONPath 文档,它们都解释了诸如
$.items[(@.length - 1)]
之类的脚本过滤器仅适用于数组,而不适用于 JSON 对象。这意味着该路径适用于下面的第一个 JSON 对象,而不适用于第二个对象:
{
"items": [
1,
2
]
}
{
"items": {
"item1": 1,
"item2": 2
}
}
有人可以证实这一点吗?另外,如果我是正确的,这种行为有逻辑原因吗?我可以想象,在这两种情况下,这样的路径可以返回相同的值(
2
)。
请注意,给定以下 JSON:
{"x":{"a":1, "b":2}}
和给定的 JSONPath 表达式:$.x.*
- 结果是 [1, 2]
- 而不是某些人可能期望的 [{"a":1}, {"b":2}]
。这就是 JSONPath 的工作原理。映射成员的匹配解析为该成员的值。
类似地,对于 JSONPath 表达式,
$.x[?@]
结果是 [1, 2]
- 只是 x
的成员值,而不是 [{"a":1}, {"b":2}]
。因此您无法访问@.a
。
类似地,对于 JSONPath 表达式
$[?@]
- 结果是 [{"a":1, "b":2}]
- 只是 x
的值,而不是 ["x":{"a":1, "b":2}]