首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Jayway JSONPath:如何选择终端节点

Jayway JSONPath:如何选择终端节点
EN

Stack Overflow用户
提问于 2020-02-06 17:47:28
回答 1查看 90关注 0票数 2

我用的是Jayway JSONPath。

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

XPath会允许not(child::*)作为谓词,但我看不到JSONPath的等价物。

EN

回答 1

Stack Overflow用户

发布于 2020-10-28 01:21:35

不幸的是,(到目前为止)还没有JSONPath实现提供这种操作。然而,在Goessner的参考资料上扩展的一些更高级的实现具有接近这一点的操作。

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

代码语言:javascript
复制
$..*@number()

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

另一种应对基本数据类型的变通方法是使用在相当多的实现(如JayWays、许多JavaScript实现等)中提供的正则表达式匹配器来解释节点的类型,例如数值

代码语言:javascript
复制
$..[?(@.price =~ /[0-9]+\.?[0-9]*/)]

同样,这不仅会给出终结值,还会避免数组和对象类型属性。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/60091991

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档