Json 使用 mule dataweave 进行转换

Json Conversion using mule dataweave

我需要将一个json(多次调用后得到,然后合并)转换成一个特定的结构。

这是我的输入 json 有效载荷

[{
    "shops": [{
        "shop": {
            "code": "AU5",
            "streetName": "a",
            "city": "a",
            "district": "a",
            "state": "a",
            "postalCode": "a",
            "country": "a"
        }
    }, {
        "shop": {
            "code": "b",
            "streetName": "b",
            "city": "b",
            "district": "b",
            "state": "b",
            "postalCode": "b",
            "country": "b"
        }
    }]
},


[
    [{
        "salesOffice": {
            "shop": {
                "code": "AU5"
            },
            "office": "MEL",
            "branch": "MEL",
            "district": "SPR",
            "subRegion": "SPR",
            "region": "AP"
        }
    }],
    [{
            "salesOffice": {
                "shop": {
                    "code": "b"
                },
                "office": "999",
                "branch": "999",
                "district": "999",
                "subRegion": "999",
                "region": "999"
            }
        }

    ]

]]

下面是预期的输出 json

{
"shops": [
    {
        "shop": {
            "code": "AU5",
            "streetName": "a",
            "city": "a",
            "district": "a",
            "state": "a",
            "postalCode": "a",
            "country": "a",
            "salesOffice": {
                "office": "MEL",
                "branch": "MEL",
                "district": "SPR",
                "subRegion": "SPR",
                "region": "AP"
            }
        }
    },
    {
        "shop": {
            "code": "b",
            "streetName": "b",
            "city": "b",
            "district": "b",
            "state": "b",
            "postalCode": "b",
            "country": "b",
            "salesOffice": {
                "office": "999",
                "branch": "999",
                "district": "999",
                "subRegion": "999",
                "region": "999"
            }
        }
    }
]}

转换时,shop 里面的 'code' 应该和 salesOffice>>shop>>'code'

里面的 'code' 匹配

下面是 Json 输出有效载荷的架构(应根据输出进行验证)

{
"$schema": "http://json-schema.org/draft-04/schema#",

"type": "object",
"properties": {
    "shops": {

        "type": "array",
        "items": {

            "type": "object",
            "properties": {
                "shop": {

                    "type": "object",
                    "properties": {
                        "code": {

                            "type": "string"
                        },
                        "streetName": {

                            "type": "string"
                        },
                        "city": {

                            "type": "string"
                        },
                        "district": {

                            "type": "string"
                        },
                        "state": {

                            "type": "string"
                        },
                        "postalCode": {

                            "type": "string"
                        },
                        "country": {

                            "type": "string"
                        }
                    },
                     "salesOffice": {

                        "type": "object",
                            "properties": {
                              "office": {

                                "type": "string"
                              },
                              "branch": {

                                "type": "string"
                              },
                              "district": {

                                "type": "string"
                              },
                              "subRegion": {

                                "type": "string"
                              },
                              "region": {

                                "type": "string"
                              }
                            }
                        },
                    "required": [
                        "code",
                        "streetName",
                        "city",
                        "district",
                        "state",
                        "postalCode",
                        "country",
                        "salesOffice"
                    ]
                }
            },
            "required": [
                "shop"
            ]
        }
    }
},
"required": [
    "shops"
]}

任何解决方案或任何指针都会有很大帮助

您可以使用验证 JSON 模式 mule 组件。

参考下面的数据编织:

%dw 1.0
%output application/json
---
{
shops: using    (salesOffice = payload[1]..salesOffice)( payload[0].shops map {
 shop :
  {
    code: $.shop.code,
    streetName:$.shop.streetName,
    city:$.shop.city,
    district:$.shop.district,
    state:$.shop.state,
    postalCode:$.shop.postalCode,
    country:$.shop.country,
    salesOffice: using (code= $.shop.code) ( salesOffice[?(code == $.shop.code)] map {
    office:$.office,
    branch:$.branch,
    district:$.district,
    subRegion:$.subRegion,
    region:$.region
})[0]
}
})
}