使用JSONPath无法获取嵌套数组中location为USA的datapoints id
问题分析与解决
导致无匹配结果的核心原因
JSON数据拼写错误:
你提供的JSON中,第一个datapoint的location值是"UAS"而非目标的"USA",这直接导致没有符合条件的数据。JSONPath表达式逻辑错误:
原表达式$.datapoints[?(@.featureValues.name[0].company[*].location == 'USA')].id存在逻辑问题:company[*].location会返回一个数组(比如["USA"]),将数组与字符串"USA"直接用==比较,在多数JSONPath实现中会返回false,因此过滤条件不生效。
修正方案
步骤1:修正JSON数据
将第一个datapoint中的"location": "UAS"修改为"location": "USA",修正后该条目符合匹配条件。
步骤2:使用正确的JSONPath表达式
推荐两种可行的表达式:
方式一:通过嵌套过滤检查
company数组内的元素$.datapoints[?(@.featureValues.name[0].company[?(@.location == 'USA')])].id该表达式会检查
company数组中是否存在location等于"USA"的元素,若存在则匹配对应的datapoint。方式二:使用
in操作符判断值是否在数组中$.datapoints[?('USA' in @.featureValues.name[0].company[*].location)].id该表达式直接判断
"USA"是否存在于company[*].location返回的数组中,逻辑更直观。
测试验证
修正后,上述表达式均可匹配到id为default.1的结果。
内容的提问来源于stack exchange,提问作者parlad
相关产品推荐
相关产品推荐

