Jackson反序列化列表类

9cbw7uwe  于 2023-04-06  发布在  其他
关注(0)|答案(2)|浏览(108)

这里有一个json,它将一个sheet作为嵌套类:

{
    "name": "test",
    "phoneList": {
        "phone": [
            {
                "number": 32323232,
                "code": 555
            },
            {
                "number": 4343423432,
                "code": 555
            }
        ]
    }
}

以下DTO类适用于此json:

class Response {

  String name;
  PhoneList phoneList;

  static class PhoneList {

    List<Phone> phone = new ArrayList<>();

    static class Phone {

      String number;
      Integer code;
    }
  }
}

有没有可能不创建一个PhoneList类,而是直接创建一个工作表?

class Response {

  String name;
  List<Phone> phoneList = new ArrayList<>();

  static class Phone {
    String number;
    Integer code;
  }
}
t3irkdon

t3irkdon1#

你可以添加下面的方法,它会像一个魅力一样工作(当然,如果你让这些DTO正确的Jacson pojo(即默认构造函数+ setters/getter))

@JsonProperty("phoneList")
private void mapPhones(Map<String, List<Phone>> phoneList) {
  this.phoneList = phoneList.get("phone");
}
h4cxqtbf

h4cxqtbf2#

是的,你可以直接创建它。看看下面的代码:

  1. Response
class Response {

    String name;
    List<Phone> phoneList = new ArrayList<>();

    public Response() {
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public List<Phone> getPhoneList() {
        return phoneList;
    }

    public void setPhoneList(List<Phone> phoneList) {
        this.phoneList = phoneList;
    }

    @Override
    public String toString() {
        return "Response{" + "name=" + name + ", phoneList=" + phoneList + '}';
    }

    class Phone {

        String number;
        Integer code;

        public String getNumber() {
            return number;
        }

        public void setNumber(String number) {
            this.number = number;
        }

        public Phone() {
        }

        public Integer getCode() {
            return code;
        }

        public void setCode(Integer code) {
            this.code = code;
        }

        @Override
        public String toString() {
            return "Phone{" + "number=" + number + ", code=" + code + '}';
        }
    }
}
  1. Main
public static void main(String[] args) throws JsonProcessingException {
    Response response = new Response();

    response.setName("test");

    Response.Phone phone = response.new Phone();
    phone.setNumber("32323232");
    phone.setCode(555);
    response.phoneList.add(phone);

    phone = response.new Phone();
    phone.setNumber("4343423432");
    phone.setCode(555);
    response.phoneList.add(phone);

    System.out.println(response.toString());

    ObjectMapper mapper = new ObjectMapper();
    mapper.enable(SerializationFeature.INDENT_OUTPUT);
    System.out.println(mapper.writeValueAsString(response));
}

相关问题