将复杂的json文件反序列化为POJO-可以用作一个列表元素,也可以不

时间:2019-03-30 21:04:18

标签: java json spring-boot jackson json-deserialization

我正在尝试将此json反序列化为POJO类,这样便可以管理对象了。 JSON:

{
 "something": "x",
 "items": [
  {
   "type": "y",
   "id": "123",
   "otherInfo": {
    "tag": "abc",
    "otherId": [
     {
      "first": "qaz",
      "second": "zaq"
     },
     {
[...]

有10多个这样的元素。 我想对其进行反序列化,所以我使用jsonschema2pojo,使用getter,setter和构造函数创建了Item和otherInfo之类的类。

然后我在DAO类中创建了一个ObjectMapper:

ObjectMapper mapper = new ObjectMapper();
    Item items;
    {
        try {
            items = mapper.readValue(new File("path/file.json"), Item.class);
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

    public Item getAllItems(){
       return items;
    }

这样,我得到的输出为空。 将Item更改为Item []时,由于JSON中“项目”上方的“内容”,我得到了“ MismatchedInputException”。

当我尝试引用位​​于Item上一级的POJO类时,我将整个JSON作为单个数组元素包含其中的所有内容。很明显,但这表明ObjectMapper正常工作。

有没有一种简单或有效的方法可以像这样反序列化JSON?

1 个答案:

答案 0 :(得分:0)

您可以创建一个包含ArrayList的父对象,以表示Item数组。

例如:

public class MyParentObject {
    String something;
    ArrayList<Item> items;
    public ArrayList<Item> getItems() {
       return items;
    }
    // the rest of your getters/setters
}

// the object mapper line becomes:
MyParentObject parentObject = mapper.readValue(new File("path/file.json"), MyParentObject.class);

ArrayList<Item> items = parentObject.getItems();

使用JSON反序列化,可以将JSON数组直接映射到ArrayList。