使用Jackson序列化为JSON时如何转换Java映射中的Java列表
我有一个Java中的人员列表,每个人都有一个id:使用Jackson序列化为JSON时如何转换Java映射中的Java列表,java,json,serialization,map,jackson,Java,Json,Serialization,Map,Jackson,我有一个Java中的人员列表,每个人都有一个id: class Person{ public int id; public String name; } 现在,我想用JSON序列化此列表,如下所示: { "1":{ "name": "tom" },{ "2":{ "name": "bob" } } 包含列表的类是否有指定JSON结构的选项 谢谢。要严格使用Person类完成上述任务,您需要 使用地图 表示名称的另一个类 类人名{ 字符串名; } Map
class Person{
public int id;
public String name;
}
现在,我想用JSON序列化此列表,如下所示:
{
"1":{
"name": "tom"
},{
"2":{
"name": "bob"
}
}
包含列表的类是否有指定JSON结构的选项
谢谢。要严格使用Person类完成上述任务,您需要
名称的另一个类
类人名{
字符串名;
}
Map Map=newhashmap();
put(person.getId(),personName);
一种可能性是,如果您总是希望以这种方式序列化人员,则可以为类型添加自定义序列化程序,并注册该序列化程序。有多种方法可以做到这一点:要么使用
SimpleModule
注册它,要么在Person
类上使用@JsonSerialize(using=PersonSerializer.class)
(此注释也可以用于属性;如果两者都已定义,则属性一将具有优先权)。您不能这样做。如果您序列化列表,它看起来会是:@Jaroslaw.zawila我希望Jackson中有一个类似于XmlJavaTypeAdapter的注释,您可以使用@JsonSerialize(contentUsing=MySerializer.class)定义自定义序列化器(如果需要,还可以定义反序列化器);(contentUsing,因为它用于列表值,而不是列表本身)感谢您的回答。因为我想保留列表,所以添加了一个方法“getPersonsAsMap()”,该方法将列表转换为映射。我用“JsonProperty”注释了这个方法,用“JsonIgnore”注释了获取列表的方法。最后,只有映射将被序列化。
class PersonName{
String name;
}
Map<int, String> map = new HashMap<int, String>();
map.put(person.getId(), personName);