我正在使用Java中的JSON将XML转换为JSON.我有这个实现反转所有子元素的问题.
当我传递这个XML时:
<Person><Child1>a</Child1><Child2>b</Child2></Person>
Run Code Online (Sandbox Code Playgroud)
我最终会得到一个让孩子倒置的JSON:
{"Person":{"Child2":"b", "Child1":"a"}}
Run Code Online (Sandbox Code Playgroud)
我的Java代码:
JSONObject jsonObject= XML.toJSONObject("<Person><Child1>a</Child1><Child2>b</Child2></Person>");
String myJSONString = jsonObject.toString(4);
Run Code Online (Sandbox Code Playgroud)
如何在保持元素顺序的情况下转换为JSON(如XML)?
Dan*_*iel 10
所以我的问题.如何保持订单转换为JSON?
使用当前的官方JSONObject,这是不可能的.API非常清楚:
JSONObject是名称/值对的无序集合.
但是,您的问题可能会有一个快速的解决方法.从我在JSONObject源代码中调查过的内容中,您可以看到它在内部使用了HashMap,并且您知道HashMap没有保留任何顺序.
public JSONObject() {
this.map = new HashMap<String, Object>();
}
你有2个选择:
修改当前的JSONObject源代码,以便使用LinkedHashMap初始化地图.LinkedHashMap是Map接口的一个实现,具有可预测的迭代顺序:
public JSONObject() {
this.map = new LinkedHashMap<String, Object>();
}
Run Code Online (Sandbox Code Playgroud)创建自己的自定义类,扩展JSONObject但在内部使用LinkedHashMap.请注意,您仍然需要在JSONObject中进行一些更改.
public class JSONObject {
//private final Map<String,Object> map; // current approach
//you have to remove final modifier and either add a getter or make it protected. I'll choose the change modifier to protected in this case.
protected Map<String,Object> map;
}
public class JSONObjectOrdered extends JSONObject {
public JSONObjectOrdered(){
this.map = new LinkedHashMap <String, Object>();
}
}
Run Code Online (Sandbox Code Playgroud)