Как я могу использовать фильтр и сопоставление с Dataweave 2

У меня есть вход Json, и я должен отредактировать его с сообщением преобразования для вывода. я пробовал фильтровать и отображать вместе, но у меня не было ожидаемого результата здесь:

{
    "success": true,
    "identities": [
        {
            "system": "testSystem_A",
            "type": "user_id",
            "ids": [
                "sys_A_Test_1",
                "sys_A_Test_2"
            ]
        },
        {
            "system": "testSystem_B",
            "type": "account_id",
            "ids": [
                "sys_B_Test_1",
                "sys_B_Test_2",
                "sys_B_Test_3",
                "sys_B_Test_4"
            ]
        },
        {
            "system": "testSystem_C",
            "type": "pass_id",
            "ids": [
                "sys_C_Test_1",
                "sys_C_Test_2",
                "sys_C_Test_3"
            ]
        },
        {
            "system": "testSystem_D",
            "type": "mock_id",
            "ids": [
                "sys_D_Test_1",
                "sys_D_Test_2"
            ]
        }
    ]
}

Это ожидаемые результаты

Выход:

{
    "success": true,
    "identities": {
        "testSystemA": [
            {
                "type": "user_id",
                "Guid": "sys_A_Test_1"
            },
            {
                "type": "user_id",
                "Guid": "sys_A_Test_2"
            }
        ],
        "testSystemB": [
            {
                "type": "account_id",
                "id": "sys_B_Test_1"
            },
            {
                "type": "account_id",
                "id": "sys_B_Test_2"
            },
            {
                "type": "account_id",
                "id": "sys_B_Test_3"
            },
            {
                "type": "account_id",
                "id": "sys_B_Test_4"
            }
        ],
        "testSystemC": [
            {
                "type": "pass_id",
                "id": "sys_C_Test_1"
            },
            {
                "type": "pass_id",
                "id": "sys_C_Test_2"
            },
            {
                "type": "pass_id",
                "id": "sys_C_Test_3"
            }
        ], 
        "testSystemD": [
            {
                "type": "mock_id",
                "id": "sys_D_Test_1"
            },
            {
                "type": "mock_id",
                "id": "sys_D_Test_2"
            }
        ]
    }
}

Я попробовал это, но это не помогло,

я могу правильно создать отображение для каждого идентификатора

%dw 2.0
output application/json
---
{
    success: payload.success,
    identities: {
        testSystem_A: (payload.identities filter ($.system =="testSystem_A") map( identity , indexOfIdentity ) -> {
            "type": $."type",
            "Guid": $."ids"
        }),
        "testSystem_B": (payload.identities filter ($.system =="testSystem_B") map( identity , indexOfIdentity ) -> {
            "type": identity."type",
            "id": identity."ids"

        }),
        testSystem_C: (payload.identities filter ($.system =="testSystem_c") map( identity , indexOfIdentity ) -> {
            ($."ids") map ->(id , indexOfIdentity ) -> {
            "type": identity."type",
            "id": identity."id"
        }),
        testSystem_D: (payload.identities filter ($.system =="testSystem_D") map( identity , indexOfIdentity ) -> {
            "type": identity."type",
            "id": identity."ids"
        })
    }
}

Я уже благодарю всех, кто мне поможет

1 ответ

Решение

Этот код DW генерирует желаемый результат, но без использования фильтра (я не знаю, поможет ли это вам)

%dw 2.0
output application/json
fun isUserID(typeId: String): String = if (typeId == "user_id") "Guid" else "id"
---
{
    "success": payload.success,
    "identities": {(
        payload.identities map ((item1) -> {
            (item1.system): item1.ids map ((item2) -> {
                "type": item1."type",
                (isUserID(item1."type")) : item2
            })
        })
    )}
}
Другие вопросы по тегам