JSONPath 中的脚本过滤表达式仅适用于数组元素(而不适用于对象)吗?

问题描述 投票:0回答:1

我已经浏览了大部分 JSONPath 文档,它们都解释了诸如

$.items[(@.length - 1)]
之类的脚本过滤器仅适用于数组,而不适用于 JSON 对象。这意味着该路径适用于下面的第一个 JSON 对象,而不适用于第二个对象:

1:

{
  "items": [
     1,
     2
  ]
}

2:

{
  "items": {
     "item1": 1,
     "item2": 2
  }
}

有人可以证实这一点吗?另外,如果我是正确的,这种行为有逻辑原因吗?我可以想象,在这两种情况下,这样的路径可以返回相同的值(

2
)。

jsonpath
1个回答
0
投票

请注意,给定以下 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}]

© www.soinside.com 2019 - 2024. All rights reserved.