2016-08-10 62 views
0

我们来看一下这个例子。我有一个pojo类如下。toJson()时可以改变属性的顺序吗?

public class MyRecord{ 
    private String name; 
    private String id; 

    //constructors and getters,setters 
} 

,当我得到的toJSON(新MyRecord(“MYNAME”,“身份识别码”)输出上面我可以得到的。

{ 
    "name": "MyName", 
    "id": "123" 
} 

而且我继承了一个如下添加的日期时间。

public class MyRecordWithDateTime extends MyRecord{ 
     private String DateTime;   

     //constructors and getters,setters 
} 

所以当我打电话的toJSON(新MyRecordWithDateTime( “2016年1月1日”, “MYNAME”, “MYID”))

输出I s这

{ 
    "name": "MyName", 
    "id": "123", 
    "dateTime": "2016-01-01" 
} 

但我真的需要如下。 (dateTime应该是第一个。)

{   
    "dateTime": "2016-01-01", 
    "name": "MyName", 
    "id": "123" 
} 

有没有办法做到继承?

+1

对象字段/成员没有订单(他们也不应该)。如果你需要订购成员,你应该使用列表/数组结构 –

+0

@RichardH,如果你仔细观察Json.toJson()提取字段,并严格遵循getter的顺序。即如果你跳过某个领域的吸气剂,它将不会出现。我问这个的原因是,我想知道至少是否有任何注释。 –

+0

依靠在你的班级中写入获取者的顺序是可怕的设计。你最好是按照你想要的顺序自己调用getters。 –

回答

1

JSON集合中的字段/成员/属性没有顺序,就这个JSON数据结构而言,“顺序”无关紧要。

我可以想象你对订单的关注的唯一原因是印刷/演示的目的。在这种情况下,我建议你自己手动构建JSON字符串。

+0

所以你的回答隐含地暗示 - >“当你创建JSON响应时,不要担心键的顺序”??? –

+1

正确。 JSON只是一个JavaScript对象的字符串表示。 JavaScript对象中的键顺序绝对无关紧要 - 实际上没有定义顺序。如果你想用特定的顺序打印出一个JSON字符串,你必须自己实现,而不是依赖库方法。 –

1

在将它放入JSON文件之前,您可以尝试制作一个有序列表(LinkedList,ArrayList或类似的东西),然后根据需要对其进行排序,然后将其放入JSON中。

但显然,比我的更好的想法存在!

但事实是:JSON不需要排序!你只需使用getter,它会找到你的关键值!即使它处于最后的位置。

+0

我无法得到你。我想改变字段的顺序? –

+1

只需在你的constroctor中使用一个列表。例如:'private LinkedList values = new LinkedList (); '对象就是一个例子。这里是一个字符串 – Souin

+0

我可以使用列表,因为你建议,但改变响应格式的缩进方面吗? –

相关问题