Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/sorting/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
多条不同路径的JSONPath并集_Json_Jsonpath - Fatal编程技术网

多条不同路径的JSONPath并集

多条不同路径的JSONPath并集,json,jsonpath,Json,Jsonpath,我正在尝试构建一个单个JSONPath查询,它将测试是否存在两个或多个路径 让我们考虑下面的示例文档: { "firstName": "John", "lastName" : "doe", "age" : 26, "address" : { "streetAddress": "naist street", "city" : "Nara",

我正在尝试构建一个单个JSONPath查询,它将测试是否存在两个或多个路径

让我们考虑下面的示例文档:

{
          "firstName": "John",
          "lastName" : "doe",
          "age"      : 26,
          "address"  : {
            "streetAddress": "naist street",
            "city"         : "Nara",
            "postalCode"   : "630-0192"
          },
          "phoneNumbers": [
            {
              "type"  : "iPhone",
              "number": "0123-4567-8888"
            },
            {
              "type"  : "home",
              "number": "0123-4567-8910"
            }
          ]
}
到目前为止,我发现:

$…[firstName,lastName,type]

并从整个文档中获取所有这些元素

但是,我需要检查两个不同的路径,例如:

 $.firstName 
 $.address.city
这可以通过单个JSONPath查询完成吗?我写不出这样的东西:

$.[firstName,address.city]
使用XML和XPath,我可以编写:

/person/firstname | /person/address/city
并获得所有匹配XML元素的并集


我能用JSONPath做同样的事情吗?

我认为最接近原始JSONPath的方法是使用递归下降和并集,即

$..['firstName','city']
Goessner实现将返回

[
   "John",
   "Nara"
]
支持对联合运算符的扩展,允许

[‘metadata.name’, ‘status.capacity’]
其中
名称
容量
元数据
状态
的成员

,它是JSONPath的一个变体,最初基于Kubernetes JSONPath解析器,支持完全独立路径的并集,例如

[employee[5].name, company.name, wageTiers[compensation > 10000]]
JSONMatch在中可用,我相信也可以

少数JSONPath实现支持和

(自0.161.0起)支持使用符号对完全独立的路径进行JSONPath并集

$..['firstName',@.address.city]
这个答案并不是对问题的100%回答,因为它假定nodejs/javascript。因为它描述了我们如何克服JSONPath的局限性,所以我希望它可以帮助其他人


我们也有类似的要求。然而,我们需要寻找数百条不同的路径并对它们进行处理,性能是一个实际问题。然后,我们将JSONPath替换为。它有点有限,但在需要进行数据处理时有一些优势

下面是您如何解决问题的方法(请注意,您可以将编译和运行部分分开,以使后续执行更高效):

//const objectScan=require('object-scan');
const data={firstName:'John',lastName:'doe',年龄:26岁,地址:{streetAddress:'naist street',city:'Nara',postalCode:'630-0192'},电话号码:[{type:'iPhone',number:'0123-4567-8888'},{type:'home',number:'0123-4567-8910'};
const r=objectScan(['firstName','address.city'],{rtn:'count'})(数据);
控制台日志(r);
//=>2
。作为控制台包装{最大高度:100%!重要;顶部:0}

是的,我也谈到了这一点,但我想知道是否可以通过单个查询来查询不同的路径。作为a的作者,我会说答案是否定的,对的解释很严格,可以称之为“规范”。这个问题以前已经提过了,可以想象一个扩展。但我不知道有任何现有的实现有一个。谢谢,所以,这可能是我问题的答案。