我正在使用 Dart 库 json_path 来过滤 JSON 对象。 当我尝试根据字段值过滤对象时,如果对象值存储在数组内,则过滤器会起作用,而如果它是父对象的常规字段,则过滤器不会起作用,请参阅示例。我尝试了几种语法变体。所有工作都在数组上进行,但不在单个对象上进行,我错过了什么?
import 'dart:convert';
import 'package:json_path/json_path.dart';
void main() {
// This example works, note the inner array with just one element
final docArray = jsonDecode('''
{
"store": {
"auto":
[
{
"price": 10
}
]
}
} ''');
// This example does not work, single field instead of array
final docObject = jsonDecode('''
{
"store": {
"auto":
{
"price": 10
}
}
} ''');
print('\nauto Object :');
JsonPath(r'$.store.auto[[email protected] < 20]').readValues(docObject).forEach(print);
print('auto Array:');
JsonPath(r'$.store.auto[[email protected] < 20]').readValues(docArray).forEach(print);
}
输出:
自动对象:
自动数组: {价格:10}
进程已完成,退出代码为 0
在您的
$.store.auto[[email protected] < 20]
中,您已经指向 store
(auto
) 中的一个属性,因此没有要过滤的数组(并且过滤器表达式 always 返回一个数组)。
如果您想获得有价格的房产列表 < 20, you can do:
JsonPath(r'$.store[[email protected] < 20]')