繁体   English   中英

Jayway JSONPath:如何选择终端节点

[英]Jayway JSONPath: how to select terminal nodes

我正在使用 Jayway JSONPath。

给定一个 JSON 文档在不同结构级别具有相同名称的节点,我将如何仅选择那些作为终端节点的节点,即只有文本或没有内容?

XPath 将允许 not(child::*) 作为谓词,但我看不到 JSONPath 等效项。

不幸的是,没有 JSONPath 实现(截至目前)提供这样的操作。 然而,在 Goessner 的参考资料上扩展的一些更高级的实现具有与此接近的操作。

如果可能,一种解决方法是使用检查节点的类型。 例如,这在 JavaScript JSONPath-Plus实现中是可能的,使用 JSON 类型的类型选择器:例如@null() , @boolean() , @number() , @string() , @array() , @object() @integer()等。 例如,这允许我们仅获取数值:

$..*@number()

结合更有意义的路径选择,我们可能会接近。 尽管如此,这不仅会产生终端值,而且至少会避免数组和对象类型属性。

另一种适用于基本数据类型的解决方法是使用在很多实现(如 JayWays、许多 JavaScript 实现等)中可用的正则表达式匹配器来解释节点的类型,例如再次让我们说数值

$..[?(@.price =~ /[0-9]+\.?[0-9]*/)]

同样,这不会只为您提供终端值,而是避免了数组和对象类型属性。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM