如何编写JSONPath表达式按条件提取非helptext类型同级节点的id值
JSONPath过滤问题解答
你的表达式问题分析
- 逻辑合理性:思路符合需求,核心逻辑是先筛选
name为p的节点,校验该节点下contenttype取值不为helptext后提取对应@id的文本值,逻辑方向没有问题。 - 语法正确性:不符合主流JSONPath实现的语法规范。jsonpath.com使用的标准Goessner版JSONPath不支持在过滤表达式
?()内部嵌套第二层?()过滤查询,你写的@.children[?(@.name=='contenttype')].text!='helptext'属于嵌套过滤写法,因此工具无法正确解析返回结果。
可用的正确表达式
$.children[?(@.name=='p' && @.children[?(@.name=='contenttype')][0].text != 'helptext')].children[?(@.name=='@id')][0].text
表达式说明:每个p节点下仅有一个contenttype子节点,因此对@.children[?(@.name=='contenttype')]返回的数组取下标[0]获取目标节点,再取text属性做判断,规避了嵌套过滤的语法问题,执行后会返回你预期的["id2"]结果。
内容的提问来源于stack exchange,提问作者Giftson David
相关产品推荐
相关产品推荐

