我使用下面的代码将多个具有不同JSON结构的XML文件的json转换为xml。
String toXmlRequest = fullRequest.toString();
JSONObject jsonObj = new JSONObject(toXmlRequest);
String XmlRequest = XML.toString(jsonObj);
System.out.println(XmlRequest);
输入
{
"EnrollmentRequest":
{
"data":
{
"commonDataContext":
{
"requestId": "ADA12131",
"clientId": "ABCDEF",
"timestamp":"2013-12-13T11:10:00.715-05:00"
},
"cardNumber" : "123456789012345" ,
"firstName" : "John" ,
"lastName" : "Smith" ,
"email" : "JohnSmith@g.com" ,
"enrollStatus" : "E" ,
"pathEnroll" : "NewAcct",
"cardSavedIndicator" : "Y"
}
}
}
产出
<EnrollmentRequest>
<data>
<firstName>John</firstName>
<lastName>Smith</lastName>
<commonDataContext>
<clientId>ABCDEF</clientId>
<requestId>ADA12131</requestId>
<timestamp>2013-12-13T11:10:00.715-05:00</timestamp>
</commonDataContext>
<pathEnroll>NewAcct</pathEnroll>
<enrollStatus>E</enrollStatus>
<cardSavedIndicator>Y</cardSavedIndicator>
<cardNumber>123456789012345</cardNumber>
<email>JohnSmith@g.com</email>
</data>
</EnrollmentRequest>
输出的顺序正在改变。它不能保持实际的顺序。有没有什么办法可以保持完整。
2条答案
按热度按时间pzfprimi1#
直接使用
org.json.JSONObject
是不可能的,原因是JSONObject使用HashMap类型的内部存储。HashMap不保留插入顺序使用
LinkedHashMap
是可能的,但是似乎不可能将JSONObject配置为使用LinkedHashMap
。另一种选择是使用确实保持顺序的库来读取,例如Jackson...。
然后将其输入XML
进行必要的类型调整,使Jackson对象看起来像org.json.JSONObject。下面是不完整的示例:
产出
wbgh16ku2#
对于嵌入式JSON数组,您需要再应用一个条件来检查它是否为数组,并将其作为JSON数组返回。