我用的是Jayway JSONPath。
给定一个JSON文档,在不同的结构级别上具有相同名称的节点,我如何只选择那些作为终端节点的节点,即只有文本或没有内容?
XPath会允许not(child::*)作为谓词,但我看不到JSONPath的等价物。
发布于 2020-10-28 01:21:35
不幸的是,(到目前为止)还没有JSONPath实现提供这种操作。然而,在Goessner的参考资料上扩展的一些更高级的实现具有接近这一点的操作。
如果可能,一种解决方法是使用检查节点的类型。例如,在JavaScript JSONPath-Plus实现中,使用@null()、@boolean()、@number()、@string()、@array()、@object() @integer()和其他类型的类型选择器是可能的。例如,这允许我们仅获取数字值:
$..*@number()结合更有意义的路径选择,我们可能会更接近。尽管如此,这不会只产生终结值,但至少避免了数组和对象类型属性。
另一种应对基本数据类型的变通方法是使用在相当多的实现(如JayWays、许多JavaScript实现等)中提供的正则表达式匹配器来解释节点的类型,例如数值
$..[?(@.price =~ /[0-9]+\.?[0-9]*/)]同样,这不仅会给出终结值,还会避免数组和对象类型属性。
https://stackoverflow.com/questions/60091991
复制相似问题