我试图将我的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]
如何解决这个问题?
答案 0 :(得分:1)
您的问题来自于失败的orders
数组的转换,只返回一个条目。
在场景后面,json:json-to-xml-transformer
使用Staxon进行XML到JSON的转换。以下是Staxon中关于数组转换的文档:https://github.com/beckchr/staxon/wiki/Mastering-Arrays
我们可以在the Mule source中看到PROP_MULTIPLE_PI
是false
且PROP_AUTO_ARRAY
未设置为true
,因此只考虑数组的一个项目,其他人都被放弃了。
因此,您最好使用Staxon编写自己的转换器,使用所需的阵列处理设置进行配置,或者使用Groovy XML Markup构建器以简单易用的方式生成XML。
答案 1 :(得分:1)
我可以建议你一件事要求你的工作。
如果你想从json生成xml。
执行以下操作
将set-payload组件添加到您的流中,将值明确指定为
{"root":#[payload]}
它可以工作,我可以从你粘贴的样本数据中生成xml数据。
请尝试发布您的状态
答案 2 :(得分:0)
你正在寻找什么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)