如何用JSONPath判断序列号HD1300的Connection值400是否存在
解决JSONPath定位特定电视条目问题
我来帮你搞定这个JSONPath查询的问题!首先先纠正下你提供的JSON数据里的语法小错误——原数据里tvs的结构多了一层冗余的大括号,正确的简化版结构应该是这样的:
{ "tvs": { "tv": [ { "serial": "HD1300", "data": [ { "title": "manufacturer", "value": "lg" }, { "title": "color", "value": "silver" }, { "title": "inches", "value": 32 }, { "title": "connection", "value": 220 }, { "title": "connection", "value": 400 } ] } // 更多电视条目 ] } }
接下来分析你之前尝试的表达式问题:
- 序列号写错且大小写不匹配:你要找的是
HD1300,但表达式里写的是hd1340,JSON是大小写敏感的,这会直接导致匹配失败 - 路径结构有误:
tv是tvs对象下的数组,正确的路径应该是$.tvs.tv而不是$.tvs.[...]
正确的JSONPath查询表达式
如果你想直接获取符合条件的connection条目,或者判断它是否存在,可以用这个表达式:
$.tvs.tv[?(@.serial=='HD1300')].data[?(@.title=='connection' && @.value==400)]
表达式拆解:
$.tvs.tv:定位到包含所有电视条目的数组[?(@.serial=='HD1300')]:过滤出序列号严格等于HD1300的电视条目(注意大小写完全匹配).data:进入该电视的属性数据数组[?(@.title=='connection' && @.value==400)]:进一步过滤出title为connection且value等于400的条目
如果执行这个表达式后返回非空结果,就说明序列号HD1300的电视里存在connection值为400的条目。
另外,如果你使用的JSONPath支持递归查询,也可以用这个简化版(效果完全一致):
$..tv[?(@.serial=='HD1300')].data[?(@.title=='connection' && @.value==400)]
内容的提问来源于stack exchange,提问作者Guel135
相关产品推荐
相关产品推荐

