使用Jackson序列化为JSON时如何转换Java映射中的Java列表

使用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

我有一个Java中的人员列表,每个人都有一个id:

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);