2011-12-06 102 views
3

序列化到JSON時,在Java地圖轉換Java列表我有「在Java中的List和每個人都有一個id:如何與傑克遜

class Person{ 
    public int id; 
    public String name; 
} 

現在我想序列化這份名單在那樣的JSON:

{ 
    "1":{ 
    "name": "tom" 
    },{ 
    "2":{ 
    "name": "bob" 
    } 
} 

是否有包含列表,指定JSON結構類的任何anotation?

謝謝。

+0

你不能這樣做。如果你序列化的列表將如下所示: –

+0

@ Jaroslaw.zawila我希望在傑克遜有一個註釋,如jaxb中的XmlJavaTypeAdapter –

+0

您可以使用@JsonSerialize(contentUsing = MySerializer)定義自定義序列化程序(和反序列化程序,如果您需要的話)。類); (contentUsing,因爲它要用於List值,而不是List本身) – StaxMan

回答

1

爲實現上述嚴格使用Person類,你需要

  1. 使用地圖
  2. 另一類代表name
class PersonName{ 
    String name; 
} 

Map<int, String> map = new HashMap<int, String>(); 

map.put(person.getId(), personName); 
+2

感謝您的回答。因爲我想保留列表,我添加了一個方法「getPersonsAsMap()」,它將列表轉換爲地圖。我用「JsonProperty」和用「JsonIgnore」獲取列表的方法註解了這個方法。最後只有地圖會被序列化。 –

2

一種可能性如果你總是希望以這種方式序列化人員,你可以添加自定義的用於類型的erializer,並註冊它。有多種方法可以做到這一點:使用SimpleModule來註冊它,或使用@JsonSerialize(using=PersonSerializer.class)Person類(此註釋也可用於屬性;如果兩個屬性都定義,則屬性將具有優先權)。