У меня JSON, который выглядит следующим образом. Я пытаюсь использовать JSONPath, чтобы получить значение __ content __, где SKU - «8A-OK9F-9LI8» и Component.Type == 'Principal'. Прямо сейчас, я играю с this JSON Path Expression Tester.Проблема Разбор Array vs Non-Array JSON с JSONPath
Это выражение JSONPath захватывает все компоненты информации, мне нужно:
$.Order..Fulfillment[?(@.SKU=='8A-OK9F-9LI8')]..Component
Но фильтрация далее, такие как $.Order..Fulfillment[?(@.SKU=='8A-OK9F-9LI8')]..Component[?(@.Type=='Principal')]
хватает только один (я считаю, что массив один) из двух составных элементов мне нужно. Я подозреваю, что это потому, что один является массивом, а один - одним элементом JSON. Можно ли захватить это с помощью одной команды или мне нужно объединить несколько команд (один для массива и один для одного элемента JSON)? Если да, как я могу получить другую информацию о компонентах, с которой я в настоящее время не получаю:
$.Order..Fulfillment[?(@.SKU=='8A-OK9F-9LI8')]..Component[?(@.Type=='Principal')]
?
Опять же, моя цель - захватить значение «__ content__» и фильтровать определенный SKU и где Component.Type == «Principal». Что-то вроде:
$.Order..Fulfillment[?(@.SKU=='8A-OK9F-9LI8')]..Component[?(@.Type=='Principal')]..Amount..__content__
Я ожидаю, чтобы вернуться ["8.49", "8.49"]
Вот JSON Я тестирую с:
{
"SettlementData": {},
"Order": [
{
"OrderID": "XXX",
"Fulfillment": {
"Item": {
"SKU": "8A-OK9F-9LI8",
"Quantity": "1",
"ItemPrice": {
"Component": [
{
"Type": "Principal",
"Amount": {
"__content__": "8.49",
"currency": "USD"
}
},
{
"Type": "Tax",
"Amount": {
"__content__": "0.74",
"currency": "USD"
}
}
]
}
}
}
},
{
"OrderID": "XXX",
"Fulfillment": {
"Item": {
"SKU": "8A-OK9F-9LI8",
"Quantity": "1",
"ItemPrice": {
"Component": {
"Type": "Principal",
"Amount": {
"__content__": "8.49",
"currency": "USD"
}
}
}
}
}
}
]
}
Это, кажется, ограничение в библиотеке, которую я использую. С тех пор я превратил каждый элемент хэша в массив, чтобы преодолеть это. Спасибо за голосование без объяснения причин. – Trinculo