0

我正在尝试从整数数组中获取第 n 个位置值。我的输入 JSON :

{
 "data" : [
     {
        "status" : "ACTIVE" ,
       "id" : 1 ,
        "isEnabled" : true,
        "sample" : [ 1,  2, 3,  4 ]
     } ,
     {
        "status" : "DEACTIVATE" ,
       "id" : 2 ,
        "isEnabled" : false,
        "sample" : [ 1,  2, 3 ]
     } ,
     {
        "status" : "ACTIVE" ,
       "id" : 3 ,
        "isEnabled" : false ,
        "sample" : [ 1,  2 ]
     },
     {
        "status" : "DEACTIVATE" ,
        "id" : 4 ,
        "isEnabled" : true ,
        "sample" : [ 1 ]
     }
 ]
}

我的输入 JsonPath :

$.data[?((@.status != null) && (@.isEnabled == true))].sample[0]

预期输出:[1,2,3,4]

但得到:[1,1]

那么如何在 jsonpath 中获得我的预期值呢?我正在使用这个工具。

4

1 回答 1

2

我相信使用 jsonpath 你需要使用两个表达式。[0]从您所拥有的内容中删除尾随(它当前选择每个样本的第一个元素,而不是过滤结果集的第一组),为您提供:

$.data[?((@.status != null) && (@.isEnabled == true))].sample

然后取评估结果:

[[1,2,3,4],[1]]

并运行它$[0]以从集合中检索第一组。最后留给你:

[1,2,3,4]

我不确定是否应该有一种方法可以用一个表达式来做你在 jsonpath 中所做的事情——这是一种指定得很糟糕的语言。


jmespath 中,您可以做基本相同的事情,但将它们连接在一起以一次性实现结果,例如:

data[?status != null && isEnabled].sample | [0]

如果这对您来说是一个更好的选择。

于 2019-01-06T16:01:56.760 回答