2016-08-10 64 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

我可以使用列表,因爲你建議,但改變響應格式的縮進方面嗎? –

相關問題