json_path 过滤器不适用于对象,适用于数组

问题描述 投票:0回答:1

我正在使用 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

arrays dart jsonpath
1个回答
0
投票

在您的

$.store.auto[[email protected] < 20]
中,您已经指向
store
(
auto
) 中的一个属性,因此没有要过滤的数组(并且过滤器表达式 always 返回一个数组)。

如果您想获得有价格的房产列表 < 20, you can do:

JsonPath(r'$.store[[email protected] < 20]')

在这个截图中更容易看到:enter image description here

© www.soinside.com 2019 - 2024. All rights reserved.