Json转换使用mule dataweave

时间:2016-05-14 20:13:39

标签: json mule mule-studio 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"
            }
        }
    }
]}

转型时,'代码'店内应与“代码”匹配。内部salesOffice>> shop>>'代码'

下面是输出有效负载的Json Schema(应根据输出进行验证)

{
"$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"
]}

任何解决方案或任何指针都将是一个很好的帮助

2 个答案:

答案 0 :(得分:2)

参考下面的dataweave:

%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]
}
})
}

答案 1 :(得分:0)

您可以使用Validate JSON Schema mule组件。