【问题标题】:converting JSON object to xml (with order as per the input)将 JSON 对象转换为 xml(按照输入的顺序)
【发布时间】:2016-07-01 12:58:45
【问题描述】:

我正在尝试使用 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 文件中没有顺序。我尝试使用linkedhashmap 覆盖 JSONObject 类。 但它没有解决并出现编码问题。我正在使用 JSON 1.5.jar 并使用 CFR 进行反编译。我已经从中获取了源代码。我在本地使用 JDK1.7。任何人都可以建议哪一种是订购 JSON 对象的最佳方式。

谢谢

【问题讨论】:

  • JSON 对象不保证其键集的顺序。理论上,密钥和相应的值可能会被打乱,并且主要发生在通过网络传输时。尽管在处理离线数据时,motly order 保持不变。如果您想确定设计中键的顺序,那么可能会为您的对象添加排序属性,或者通过使用 JSON 中键的特定命名约定来实现它。

标签: java json xml


【解决方案1】:

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

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-04-14
    • 2013-07-26
    • 1970-01-01
    • 1970-01-01
    • 2018-04-16
    • 1970-01-01
    • 2018-01-16
    相关资源
    最近更新 更多