如何通过JSONPath筛选Customer为123的Item对应的Itemid?
正确的JSONPath表达式
针对你的JSON结构,正确的表达式是:
$.*[?(@.Customers[?(@.Customer == 123)])].Itemid
逻辑解释:
$.*:遍历根节点下的所有Item对象(即键名以Item:开头的对象)[?(@.Customers[?(@.Customer == 123)])]:过滤出Customers数组中存在Customer值为123的Item对象.Itemid:提取这些符合条件的Item对象的Itemid属性值
如果你的JSONPath引擎支持更简洁的数组判断语法(类似JavaScript的some方法),也可以使用:
$.*[?(@.Customers.some(c => c.Customer == 123))].Itemid
原有表达式失效原因:
你之前的写法$..Itemid[?($..Customers[?(@.Customer==123)])]逻辑顺序错误:它先提取所有Itemid,再尝试基于全局的Customers数组过滤,导致匹配逻辑无法正确关联到对应的Item对象,自然无法得到预期结果。
内容的提问来源于stack exchange,提问作者DIY Dan
相关产品推荐
相关产品推荐

