XML转换后Java中JSON元素的反转顺序

Fiv*_*veO 11 java json

我正在使用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个选择:

  1. 修改当前的JSONObject源代码,以便使用LinkedHashMap初始化地图.LinkedHashMap是Map接口的一个实现,具有可预测的迭代顺序:

    public JSONObject() {
          this.map = new LinkedHashMap<String, Object>();
    }
    
    Run Code Online (Sandbox Code Playgroud)
  2. 创建自己的自定义类,扩展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)