Вложенные условия JsonPathJAVA

Программисты JAVA общаются здесь
Ответить
Anonymous
 Вложенные условия JsonPath

Сообщение Anonymous »

У меня есть этот образец JSON

Код: Выделить всё

{
"accessRequestId": "2c91808b6ef1d43e016efba0ce470904",
"requestedBy": {
"type": "IDENTITY",
"id": "2c91808568c529c60168cca6f90c1313",
"name": "William Wilson"
},
"requestedItemsStatus": [{
"id": "2c91808b6ef1d43e016efba0ce470904",
"name": "Engineering Access",
"description": "Access to engineering database",
"type": "ACCESS_PROFILE",
"operation": "Add",
"comment": "William needs this access to do his job.",
"clientMetadata": {
"applicationName": "My application"
},
"approvalInfo": [{
"approvalComment": "This access looks good.  Approved.",
"approvalDecision": "APPROVED",
"approverName": "Stephen.Austin",
"approvers": [{
"type": "IDENTITY",
"id": "2c91808568c529c60168cca6f90c1313",
"name": "William Wilson"
}
]
}
]
}, {
"id": "2c91808b6ef1d43e016efba0ce470904",
"name": "Engineering Profile",
"description": "Access to engineering database",
"type": "ACCESS_PROFILE",
"operation": "Add",
"comment": "William needs this access to do his job.",
"clientMetadata": {
"applicationName": "My application"
},
"approvalInfo": [{
"approvalComment": "This access looks good.  Approved.",
"approvalDecision": "NOTAPPROVED",
"approverName": "Stephen.Austin",
"approvers": [{
"type": "IDENTITY",
"id": "2c91808568c529c60168cca6f90c1313",
"name": "William Wilson"
}, {
"type": "IDENTITY PROFILE",
"id": "2c91808568c529c60168cca6f90c1313",
"name": "Jack Blue"
}
]
}, {
"approvalComment": "This access looks good.   Approved.",
"approvalDecision": "ABSENT",
"approverName": "Steven.Spielberg",
"approvers": [{
"type": "IDENTITY",
"id": "2c91808568c529c60168cca6f90c1313",
"name": "William Wilson"
}, {
"type": "IDENTITY PROFILE",
"id": "2c91808568c529c60168cca6f90c1313",
"name": "Luke Skywalker"
}
]
}
]
}
]
}
Моя цель — найти единственную «approvalInfo», где Люк Скайуокер является одним из утверждающих.
Если я использую следующий JsonPath, я получу правильный результат:

Код: Выделить всё

$.requestedItemsStatus[*].approvalInfo[?(@.approvers[1].name=='Luke Skywalker')]
но я указываю индекс массива утверждающих утверждающих[1], если я попытаюсь преобразовать этот запрос во что-то более общее, я больше не получу правильный результат (или, лучше, то, что я посещаю)
после некоторых моих предварительных неудачных попыток:

Код: Выделить всё

$.requestedItemsStatus[*].approvalInfo[?(@.approvers[*].name=='Luke Skywalker')]
0 результатов

Код: Выделить всё

$.requestedItemsStatus[*].approvalInfo[?(@.approvers[?(@.name =='Luke Skywalker')])]
3 результата (все объекты ApprovalInfo)

Код: Выделить всё

$.requestedItemsStatus[*].approvalInfo[?(@.approvers[?(@.type=='IDENTITY PROFILE')].name=='Luke Skywalker')]
0 результатов
может ли кто-нибудь помочь мне найти общий запрос jsonpath? почему мои попытки не увенчались успехом?
---UDATE----
хорошо, я обнаружил, что проблема связана с java-библиотекой, я использую com.jayway.jsonpath.json-path, есть ли у кого-нибудь обходной путь для решения проблемы?

Подробнее здесь: https://stackoverflow.com/questions/798 ... conditions
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «JAVA»