Почему мой код карты dataweave не работает?

Я пытаюсь преобразовать код из mule 3 в mule 4, поэтому я использую dataweave 2. Я продолжаю получать ошибки из этого кода.

keySets: if(payload.autoQuote !=null) payload.autoQuote map (autoQuote) -> {
    (if(payload.autoQuote.personalAuto.vehicles != null) autoQuote.personalAuto.vehicles map ((vehicles,indexOfvehicle) ->{
        keySet: {
            key: if(vehicles.usage != null) vehicles.usage else 'DNF' ,
            keySequence: "TAUTO_USE_TYPE" ++ '_' ++ indexOfvehicle
    }
    } else {}))
} else {}

В первой строке я получаю несоответствующий ввод '->' ожидание 'else'

во второй строке я получаю - отсутствует EOF в "полезной нагрузке"

и - нет жизнеспособной альтернативы при вводе '(' на первых двух '('


person Grasshopper    schedule 24.07.2019    source источник


Ответы (3)


Я считаю, что keySets - это список, а не объект, вы должны использовать [], а не {} в своих операторах else. Я отредактировал некоторые фигурные скобки, и для меня он компилируется нормально, хотя я не уверен, будет ли он работать так, как ожидалось для вас.

keySets: if(payload.autoQuote !=null) (payload.autoQuote map (autoQuote) -> {
    (if(payload.autoQuote.personalAuto.vehicles != null) 
        autoQuote.personalAuto.vehicles map ((vehicles,indexOfvehicle) -> {
            keySet: {
                key: if(vehicles.usage != null) vehicles.usage else 'DNF',
                keySequence: "TAUTO_USE_TYPE" ++ '_' ++ indexOfvehicle
        }
    }) else [])
}) else []

Попробуйте и дайте мне знать, сработало ли оно.

person YoManTaMero    schedule 25.07.2019

Это не дает мне ошибок, хотя я не уверен, имеет ли это смысл:

%dw 2.0
output application/json
---
{
    keySets: if(payload.autoQuote !=null) (payload.autoQuote) map(autoQuote, i)  -> {
        ( if(payload.autoQuote.personalAuto.vehicles != null) (autoQuote.personalAuto.vehicles) map (vehicles,indexOfvehicle) ->{
            keySet: {
                key: if(vehicles.usage != null) vehicles.usage else 'DNF' ,
                keySequence: "TAUTO_USE_TYPE" ++ '_' ++ indexOfvehicle
            }
        } else {})
    } else {}
}

Вы должны привести пример ввода и ожидаемого результата.

Также я не уверен, почему вы не используете параметр autoQuote карты внутри карты вместо payload.autoQuote ...

person aled    schedule 25.07.2019

Оказывается, я ошибся в круглых скобках. Первое слово else было в скобках после карты. Должно получиться вот так. Не знаю, работает ли он, но по крайней мере компилируется.

keySets: if(payload.autoQuote !=null) payload.autoQuote map (autoQuote) -> {
    (if(payload.autoQuote.personalAuto.vehicles != null) autoQuote.personalAuto.vehicles map ((vehicles,indexOfvehicle) ->{
    keySet: {
        key: if(vehicles.usage != null) vehicles.usage else 'DNF' ,
        keySequence: "TAUTO_USE_TYPE" ++ '_' ++ indexOfvehicle
}
}) else {})
} else {}
person Grasshopper    schedule 26.07.2019