2011-07-13 50 views
5

我正在使用Jersey來構建Java REST Web應用程序以獲取JSON數據輸出。Jersey JSON鍵/值順序

我遇到了鍵/值對的排序問題。 我希望它是這樣的順序:ID,名稱,區域ID 但在我的JSON輸出它是這樣的順序:areaId,ID,名稱雖然。

有人知道如何控制排序嗎?


這是我的房間對象類:

import javax.xml.bind.annotation.XmlAttribute; 
import javax.xml.bind.annotation.XmlRootElement; 

@XmlRootElement 
public class RoomEntitiy { 

private int id; 
private String name; 
private int areaId; 

public RoomEntitiy() {} 

public RoomEntitiy(int id, String name, int areaId) { 
    this.id = id; 
    this.name = name; 
    this.areaId = areaId; 
} 
@XmlAttribute 
public final int getId() { 
    return id; 
} 

public final void setId(int id) { 
    this.id = id; 
} 

public final String getName() { 
    return name; 
} 

public final void setName(String name) { 
    this.name = name; 
} 


public final int getArea() { 
    return areaId; 
} 

public final void setArea(int areaId) { 
    this.areaId = areaId; 
} 

} 

這是我的JSON輸出:

{ 
"rooms": [ 
    { 
     "areaId": 2, 
     "id": 1, 
     "name": "room 831" 
    }, 
    { 
     "areaId": 1, 
     "id": 2, 
     "name": "room 683" 
    }, 
    { 
     "areaId": 1, 
     "id": 3, 
     "name": "Raum 485" 
    }, 
    { 
     "areaId": 5, 
     "id": 4, 
     "name": "room 600" 
    }, 
    { 
     "areaId": 2, 
     "id": 5, 
     "name": "room 283" 
    }, 
    { 
     "areaId": 4, 
     "id": 6, 
     "name": "room 696" 
    } 
    ] 
} 

UPDATE 好吧,我解決了這個問題。感謝您的回覆。

我剛添加以下代碼下面@XmlRootElement

@XmlType(propOrder = { 
    "id", 
    "name", 
    "areaId" 
}) 
+2

爲什麼訂單很重要? JavaScript對象沒有固有的順序。 –

回答

4

看起來元素的順序是字母順序的(是的,我是福爾摩斯..)。在大多數情況下,不需要訂購個人屬性。但我相信我曾經做過一些自定義,你可以使用下面的註解來控制序列化。

@XmlRootElement 
@XmlType(propOrder={"id", "areaId", "name"}) 

如果這不起作用,那麼你可以使用其他序列化機制,如傑克遜或Gson。

+0

Thanks @ doc_180已經找到它了 – imwill

3

JSON對象是explicitly unordered

一個目的是零個或多個名稱/值對

的無序集合如果您要訂購,使用數組(但在這種情況下,不管你用它來處理數據應該只是要求按照它想要的順序而不是循環的鍵)。