将 json 数据转换为 xml 时遇到问题:mule esb

Facing issue while convering json data into xml : mule esb

我试图将我的 json 数据转换为 xml 格式。但是只有一半的数据被转换成 xml.

我的负载是

{"orders":[{"orderName":"Laptop","price":34000,"Date":"2014/01/12","Type":"DELL","stock":52,"code":"152666AS"},

    {"orderName":"Chip","price":345,"Date":"2014/02/20","Type":"DELL","stock":50,"code":"152666AW"},

    {"orderName":"Laptop1","price":35000,"Date":"2015/02/13","Type":"DELL1","stock":51,"code":"152666AX"}]}

但在输出中我只有一个 json 项目

    <?xml version='1.0'?>
<orders>
<orderName>Laptop</orderName>
<price>34000</price>
<Date>2014/01/12</Date>
<Type>DELL</Type>
<stock>52</stock>
<code>152666AW</code>
</orders>

我的流程如下

<flow name="testFlow">
        <http:listener config-ref="HTTP_Quickbook" path="/" doc:name="HTTP"/>
        <connector-test:my-processor config-ref="ConnectorTest__Configuration_type_strategy" content="APP" doc:name="ConnectorTest"/>
        <json:json-to-xml-transformer  mimeType="application/json" doc:name="JSON to XML"/>
        <logger message="#[payload]" level="INFO" doc:name="Logger"/>

</flow>

我需要 xml 格式的整个 json 字符串。我必须改变什么?

我测试了创建自定义转换器。我的自定义转换器如下

InputStream input = new FileInputStream(new File("test.json"));
            OutputStream output = System.out;
            XMLInputFactory inputFactory = XMLInputFactory.newInstance();
            inputFactory.setProperty(XMLInputFactory.IS_COALESCING, true);
            XMLEventReader reader = inputFactory.createXMLEventReader(input);

            XMLOutputFactory outputFactory = new JsonXMLOutputFactory();
            outputFactory.setProperty(JsonXMLOutputFactory.PROP_PRETTY_PRINT, true);
            XMLEventWriter writer = outputFactory.createXMLEventWriter(output);

            writer = new XMLMultipleEventWriter(writer, false,"/orders");

            writer.add(reader);

            reader.close();
            writer.close();

现在我得到以下错误

com.ctc.wstx.exc.WstxUnexpectedCharException: Unexpected character '{' (code 123) in prolog; expected '<'
 at [row,col {unknown-source}]: [1,1]

如何解决?

您的问题来自于 orders 的数组转换失败并且 returns 只有一个条目。

在幕后,json:json-to-xml-transformer 使用 Staxon 进行 XML 到 JSON 的转换。这是 Staxon 中关于数组转换的文档:https://github.com/beckchr/staxon/wiki/Mastering-Arrays

我们在the Mule source中可以看到PROP_MULTIPLE_PIfalsePROP_AUTO_ARRAY没有设置为true,所以数组只有一项是考虑过,其他的都放弃了。

所以最好的办法是你也使用 Staxon 编写自己的转换器,配置你想要的数组处理设置,或者使用 Groovy XML 标记生成器生成 XML 以一种简单易行的方式。

你要找的东西json

{
      "ocs:price": {
        "@exponent": "-1",
        "#text": "2"
      }
    }

这是将格式从 JSON 转换为 XML 的格式:

<ocs:price exponent="-1">2</ocs:price> 

在 java/groovy 脚本中,我使用了类似这样的东西来转换它

import net.sf.json.JSON
import net.sf.json.JSONSerializer
import net.sf.json.xml.XMLSerializer

String str = '''{
  "ocs:price": {
    "@exponent": "-1",
    "#text": "2"
  }
}'''
JSON json = JSONSerializer.toJSON( str )
XMLSerializer xmlSerializer = new XMLSerializer()
xmlSerializer.setTypeHintsCompatibility( false )
String xml = xmlSerializer.write( json )
System.out.println(xml)

我可以建议你一件事来满足你的要求。

如果您想从 json 生成 xml。

执行以下操作

将 set-payload 组件添加到您的流程中明确指定值

{"root":#[payload]}

它会起作用,我可以从您粘贴的示例数据中生成 xml 数据。

请尝试并post你的状态