杰克逊:如何用一个键包装对象,这是序列化对象的属性之一?

时间:2017-09-19 16:36:12

标签: java json jackson

我想实现以下JSON结构:

"laptops":[  
      {  
         "apple":{  
            "serial":"value",
            "manufacture_date":"some_date"
         },
         "lenovo":{  
            "serial":"value",
            "manufacture_date":"some_date"
         }
      }
   ]

"lenovo""apple"键的值将具有完全相同的结构。不同类型的笔记本电脑不会有其他属性。话虽如此,没有必要实现类型层次结构。一个pojo应该这样做:

public final class Laptop {

  private String serial;

  @JsonProperty(name="manufacture_date")
  private String manufactureDate;

  private String make;

  public Laptop() {}

  public String getSerial(){
    return serial;
 }

  public setSerial(String serial){
    this.serial = serial;
  }

  public String getManufactureDate(){
    return manufactureDate;
  }

  public setManufactureDate(String manufactureDate){
    this.manufactureDate = manufactureDate;
  }

  public String getMake(){
    return make;
  }

  public setMake(String make){
    this.make = make;
  }

}

正如您在Laptop pojo中看到的那样,我正在介绍make属性,但我不希望它被序列化为键值对。相反,我希望make值成为Laptop对象的包装器。

我如何实现这一目标?

1 个答案:

答案 0 :(得分:2)

使用Map<String, Laptop>,其中键是每台笔记本电脑的品牌。并使用make注释@JsonIgnore字段以避免序列化。