将JSON对象转换为xml(根据输入顺序)

时间:2016-07-01 12:58:46

标签: java json xml

我正在尝试使用JSON创建XML。 这是输入:

String message={StoreMasterRequest:{Message:{StandardBusinessDocumentHeader:{HeaderVersion:'1.0',Sender:{a:{Identifier:{body:'1',Authority:'EAN.UCC'}}},Receiver:{b:{Identifier:{body:'123',Authority:'EAN.UCC'}}},DocumentIdentification:{Standard:'AH-VI Specific Standard',TypeVersion:'1.0',InstanceIdentifier:'23',Type:'Store Master',MultipleType:'false',CreationDateAndTime:'2016-06-28T15&&54&&17'}},Payload:{StoreMaster:{MessageID:'23',MessageCreated:'2016-06-28T15&&54&&15',StoreNo:'151',LMExemptionStart:'',LMExemptionEnd:'',StoreGLN:'8710400034390',CountryCode:'NL',Street:'Amstel',HouseNumber:'900',PostalCode:'1185AL',City:'AMSTELVEEN',State:'HOLLAND',StreetDelivery:'AmstelDel',HouseNumberDelivery:'464',PostalCodeDelivery:'1185AL'}}}}}

在我的java代码中我使用以下内容。

xml=org.json.XML.toString(new org.json.JSONObject(message));

XML的输出将作为

<StoreMasterRequest><Message><Payload><StoreMaster><Street>Amstel</Street><City>AMSTELVEEN</City><StoreGLN>8710400034390</StoreGLN><StreetDelivery>AmstelDel</StreetDelivery><PostalCodeDelivery>1185AL</PostalCodeDelivery><StoreNo>151</StoreNo><LMExemptionStart/><PostalCode>1185AL</PostalCode><State>HOLLAND</State><MessageID>23</MessageID><HouseNumberDelivery>464</HouseNumberDelivery><LMExemptionEnd/><HouseNumber>900</HouseNumber><CountryCode>NL</CountryCode><MessageCreated>2016-06-28T15:54:15</MessageCreated></StoreMaster></Payload><StandardBusinessDocumentHeader><DocumentIdentification><Standard>AH-VI Specific Standard</Standard><InstanceIdentifier>23</InstanceIdentifier><TypeVersion>1.0</TypeVersion><CreationDateAndTime>2016-06-28T15:54:17</CreationDateAndTime><Type>Store Master</Type><MultipleType>false</MultipleType></DocumentIdentification><Sender><a><Identifier><body>1</body><Authority>EAN.UCC</Authority></Identifier></a></Sender><HeaderVersion>1.0</HeaderVersion><Receiver><b><Identifier><body>123</body><Authority>EAN.UCC</Authority></Identifier></b></Receiver></StandardBusinessDocumentHeader></Message></StoreMasterRequest>

我看到生成的XML文件中没有顺序,因为string.i尝试使用linkedhashmap覆盖JSONObject类。 但它没有解决并遇到编码问题。我正在使用JSON 1.5.jar并使用CFR进行反编译。我从这里获取了源代码。我在我的本地使用JDK1.7。任何人都可以建议哪一个是订购JSON对象的最佳方式。

谢谢

1 个答案:

答案 0 :(得分:0)

您可能想尝试XSLT 3.0中的json-to-xml()函数(在Saxon 9.7中实现),它保留了地图中条目的顺序。但是,然后需要转换输出:XSLT函数将JSON密钥转换为XML属性值

<string key="Street">Amstel</string>

因为您无法确定JSON密钥是否是有效的XML元素名称。