如何从 JsonPath Finder 中的整数数组获取第 n 个位置值?

How to got nth position value from integer array in JsonPath Finder?

我正在尝试从整数数组中获取第 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 中获取我的期望值呢?我正在使用 this 工具。

我相信对于 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]

如果这是您的首选。