将JSON字符串转换为Java对象时如何忽略特定的JSON字段?

时间:2016-12-14 11:51:43

标签: java json jackson

我有以下json数据作为数据库的响应,我需要映射到我的Java Pojo。

Json回复:

{
"Vehicle" { 
 "travelMedium" : "road",
"CarList" : {
    "car": [
       {
        "company": "Maruthi",
         "color" : "red"   
       },
       {
        "company": "Honda",
         "color" : "black"   
       },
       {
        "company": "Swift",
         "color" : "white"   
       }
      ] 
  }
 }
}

的POJO

Class Vehicle {
  String travelMedium;
  List<Car> car;

}


Class Car {
  private company;
  private color;
}

我正在使用Jackson进行这种反序列化,它将json绑定到Java对象,但附加 字段CarList给出错误。我希望避免绑定时的“CarList”字段(json字符串到Java Pojo)。

我想知道实现这一目标的方法。或者任何建议都会很棒。

2 个答案:

答案 0 :(得分:2)

也许它不那么干净。但是如果你想避免在你的pojo中使用这个carList字段,你可以这样做:

您可以提供setter方法并设置实际需要的字段。

@JsonProperty("carList")
public void setCarList(Map<String, List<Car>> cars) {
  this.car = cars.get("carList");
}

答案 1 :(得分:0)

您实际上不想忽略CarList字段,而是想自动“展开”它。

您可能需要一个包装类:

public class CarList {
    private final List<Car> car;
    @JsonCreator
    public CarList(@JsonProperty("car") List<Car> car) {
        this.car = car == null ? Collections.emptyList() : Collection.unmodifiableList(car);       
    }
    ... 
}

然后

public class Vehicle {
    private final String travelMedium;
    private final List<Car> car;
    @JsonCreator
    public CarList(@JsonProperty("travelMedium") String travelMedium,
                   @JsonProperty("CarList") CarList carList) {
        this.travelMedium = travelMedium;
        this.car = carList == null ? Collections.emptyList() : Collection.unmodifiableList(carList.getCar());
    }
    ... 
}