Как получить значение n-й позиции из целочисленного массива в JsonPath Finder? - PullRequest
0 голосов
/ 06 января 2019

Я пытаюсь получить 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? Я использую этот инструмент.

1 Ответ

0 голосов
/ 06 января 2019

Я считаю, что с 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]

на тот случай, если для вас это предпочтительный вариант.

...