Фильтр Dataweave JSON

Я пытаюсь выбрать данные из запроса JSON на основе одного из полей

[
    {
        "Field1": "data1",
        "Field2": "set1",
        "Field3": "reset1"
    },
    {
        "Field1": "data2",
        "Field2": "set2",
        "Field3": "reset2"
    },
    {
        "Field1": "data3",
        "Field2": "set3",
        "Field3": "reset3"
    },
    {
        "Field1": "data4",
        "Field2": "set4",
        "Field3": "reset4"
    }
]

Я хочу выбрать строковое значение field3, где field2 равно «set3». Это "reset3".

DWL Я пробовал:

payload.Field3 filter (payload.Field2 ==["set3"])

person Nishith Coomar    schedule 19.07.2018    source источник


Ответы (2)


Использование может использовать это выражение DW:

%dw 1.0
%output application/json
---
payload filter ($.Field2=="set3") map {
    Field3: $.Field3
}

Результат:

[
   {"Field3": "reset3"}
]
person Subham Pal    schedule 25.07.2018

Вы можете фильтровать так:

<logger level="ERROR" message="Field3:::: #[(payload filter ($.Field2 =='set3'))[0].Field3]" />

Фильтр возвращает массив, поскольку селектор массива [0], если есть вероятность получения более одного результата, вы можете изменить выражение.

person Ryan Carter    schedule 19.07.2018
comment
Это не работает, я получаю NULL, назначенный полезной нагрузке. Однако, если я использую setPayload после преобразования для извлечения значения, он работает нормально. В качестве хорошей практики я хочу обработать это в коде Dataweave ... - person Nishith Coomar; 19.07.2018
comment
это код dataweave. это просто регистратор для вывода значения для демонстрации. используйте set-payload и т. д., если вы хотите где-то установить значение - person Ryan Carter; 20.07.2018