Как получить значение n-й позиции из целочисленного массива в 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? Я использую этот инструмент.

1 ответ

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

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

Другие вопросы по тегам