Dart json_path库过滤单个对象失效,仅数组生效求助
解决方法 & 原因
问题核心是:[?@.price < 20]是数组专用的过滤断言语法,只能在数组节点上下文里生效,直接用在单个对象上会被忽略。
给两种修正方案,选哪种都行:
方案1:调整路径,在父节点层面判断
把断言放到父节点store下,判断auto的属性,然后返回auto对象:
// 替换原来的路径 JsonPath(r'$.store[?@.auto.price < 20].auto').readValues(docObject)
方案2:把单个对象转为虚拟数组上下文
用[]把单个对象节点包装成数组上下文,这样就能复用数组过滤语法:
// 替换原来的路径 JsonPath(r'$.store.[auto][?@.price < 20]').readValues(docObject)
修正后的完整示例
import 'dart:convert'; import 'package:json_path/json_path.dart'; void main() { final docArray = jsonDecode(''' { "store": { "auto": [ { "price": 10 } ] } } '''); final docObject = jsonDecode(''' { "store": { "auto": { "price": 10 } } } '''); print('\nauto Object(方案1):'); JsonPath(r'$.store[?@.auto.price < 20].auto').readValues(docObject).forEach(print); print('\nauto Object(方案2):'); JsonPath(r'$.store.[auto][?@.price < 20]').readValues(docObject).forEach(print); print('\nauto Array:'); JsonPath(r'$.store.auto[?@.price < 20]').readValues(docArray).forEach(print); }
修正后输出
auto Object(方案1): {price: 10} auto Object(方案2): {price: 10} auto Array: {price: 10} Process finished with exit code 0
内容的提问来源于stack exchange,提问作者Marino Segnan
相关产品推荐
相关产品推荐

