如何通过JSON Path根据已知ENTRYID获取匹配的Tasks.Id值
JSONPath查询问题解决方案
问题原因说明
你编写的两种写法分别存在以下问题:
- 第一种写法逻辑符合需求,报错通常是因为所用的JSONPath解析器对过滤器内的多级固定下标引用兼容性差,或是使用了宽松相等运算符
==触发解析规则差异 - 第二种写法存在低级拼写错误:
Activites拼写错误(少了字母i,正确拼写为Activities),且额外嵌套的过滤器属于冗余逻辑,反而会增加解析失败概率
正确查询语法
以下两种写法均适配绝大多数主流JSONPath解析器(Jayway、Goessner等),可以直接使用:
通用兼容写法(推荐)
使用严格相等运算符===避免解析器隐式类型转换问题:
$.Tasks[?(@.Activities[0].Entry.AnswersFlat[0].ENTRYID === '95B53C6CF6104F0E86B5744083A22FAD')].Id
老旧解析器适配写法
用括号包裹判断逻辑消除解析歧义:
$.Tasks[?((@.Activities[0].Entry.AnswersFlat[0].ENTRYID) == '95B53C6CF6104F0E86B5744083A22FAD')].Id
验证结果
针对你提供的测试JSON,上述两种写法均会正确返回匹配的Id值:
["652a187f2a584a0f84aaadb9016cfa4b"]
内容的提问来源于stack exchange,提问作者Toddleson
相关产品推荐
相关产品推荐

