[英]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.