Как я могу использовать фильтр и сопоставление с Dataweave 2 - PullRequest
0 голосов
/ 06 мая 2019

У меня есть входные данные 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 Ответ

2 голосов
/ 06 мая 2019

Этот код 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
            })
        })
    )}
}
...