Как получить значение 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]
в случае, если это предпочтительный вариант для вас.