【问题标题】:JSON to XML Dataweave transformation with list objects带有列表对象的 JSON 到 XML Dataweave 转换
【发布时间】:2016-02-26 20:45:46
【问题描述】:

我正在尝试使用 Mule Dataweave 将 JSON 对象转换为 XML 对象。下面是输入的 JSON:

{
    "root": {
        "OBJECT1": {
            "PARAM1": "PARAM1VALUE",
            "PARAM2": "PARAM2VALUE"
        },
        "OBJECT2": [{
            "KEY": "PARAMROWKEYVALUE1",
            "VALUE": "PARAMROWVALUEVAL1"
        }, {
            "KEY": "PARAMROWKEYVALUE2",
            "VALUE": "PARAMROWVALUEVAL2"
        }],
        "OBJECT3": {
            "PARAM3": "PARAM3VALUE",
            "PARAM4": "PARAM4VALUE"
        }
    }
}

我想把上面的转换成下面的XML:

<root>
    <node1>PARAM1VALUE PARAM2VALUE</node1>
    <args>
        <paramrow>
            <KEY>PARAMROWKEYVALUE1</KEY>
            <VALUE>PARAMROWVALUEVAL1</VALUE>
        </paramrow>
        <paramrow>
            <KEY>PARAMROWKEYVALUE2</KEY>
            <VALUE>PARAMROWVALUEVAL2</VALUE>
        </paramrow>
    </args>
    <details>
        <PARAM3>PARAM3VALUE</PARAM3>
    </details>
</root>

但是,当我将此 JSON 用作示例输入时,它会引发错误,提示“验证映射”:

%dw 1.0
%output application/xml
---
payload

如何将这些对象元素映射到 XML?

【问题讨论】:

    标签: mule dataweave


    【解决方案1】:

    试试下面的 DataWeave

    %dw 1.0
    %output application/xml
    ---
    {
        root: {
            node1: payload.root.OBJECT1.PARAM1 ++ ' ' ++ payload.root.OBJECT1.PARAM2,
            args: {
                (payload.root.OBJECT2 map {
                    paramrow: {
                        KEY: $.KEY,
                        VALUE: $.VALUE
                    }
                })
            },
            details: {
                (payload.root.OBJECT3 mapObject {
                    '$$': $
                })
            }
        }
    }
    

    【讨论】:

      【解决方案2】:

      考虑使用官方的 MuleSoft Developer 文档。

      那里有很多 DataWeave 示例和完整的参考资料。

      https://docs.mulesoft.com/mule-user-guide/v/3.7/dataweave-examples#json-to-xml https://docs.mulesoft.com/mule-user-guide/v/3.7/dataweave-reference-documentation

      【讨论】:

        【解决方案3】:

        @mlucas67,是的,dataweave 表达式有效。

        这是我尝试过的另一种方法。

        %dw 1.0
        %input payload application/json
        %output application/xml
        ---
        {
            root: {(payload map {
                node1: $.OBJECT1.PARAM1 ++ ' ' ++ $.OBJECT1.PARAM2,
                args: {
                    ($.OBJECT2 map paramrow: $)
                },
                details: 
                    PARAM3: $.OBJECT3.PARAM3
            })
            }
        }
        

        感谢大家对这篇文章的评论。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2015-11-19
          • 2023-03-04
          • 1970-01-01
          • 2022-01-09
          相关资源
          最近更新 更多