FLAT JSON ARRAY列出了带有Jackson JSON lib的Beans

时间:2017-01-18 10:19:18

标签: java json java-8 jackson

我有一个扁平的json数组,如下所示:

[
  {
    "homeID": "ID1",
    "homeName": "David",
    "childID": "ID1",
    "childName": "AAAA"
  },
  {
    "homeID": "ID1",
    "homeName": "David",
    "childID": "ID2",
    "childName": "AAAAA"
  },
  {
    "homeID": "ID2",
    "homeName": "CASEY",
    "childID": "ID1",
    "childName": "AAAA"
  },
  {
    "homeID": "ID2",
    "homeName": "CASEY",
    "childID": "ID2",
    "childName": "AAAAA"
  }
]

现在我需要做的是将这个JSONARRAY解码为list<HOME>的列表,在这个HOMES列表中我有一个列表list<CHILD>

我的Bean课程:

public class Home{
    private String homeName;
    private list<CHILD>;

    public Home(){}
}

public class Child{
    private String childName;

    public Child(){}
}

那么使用Jackson JSON lib和java 8进行此映射的最佳做法是什么?

2 个答案:

答案 0 :(得分:2)

我认为GSON正是您所寻找的,它是一个Java API,可以在Java中读取/写入JSON,它将JSON作为输入并将其转换为Java对象。

你需要写一些类似的东西:

String jsonInString = "{'homeName' : 'home1', 'children': [{'childName': 'child1'}]}";
Home h= gson.fromJson(jsonInString, Home.class);

它会为您提供Home个对象,您只需对其进行编辑即可阅读List<Home>

这将是:

Type listType = new TypeToken<List<Home>>() {}.getType();
List<Home> yourList = new Gson().fromJson(yourJSONString, listType);

这将为您提供所需的信息。

您可以参考此gson tutorialthe answer here了解更多详情和阅读。

答案 1 :(得分:0)

我认为custom deserializers正是您所寻找的:

@JsonDeserialize(using = HomeDeserializer.class)
public class Home {
    private String homeName;
    private List<Child> childs;

    public Home(String homeName, String childName) {
        this.homeName = homeName;
        this.childs = Arrays.asList(new Child(childName));
    }

    // additional constructors
}

public class Child {
    private String childName;

    public Child(String childName) {
        this.childName = childName;
    }

    // additional constructors
}

public class HomeDeserializer extends JsonDeserializer<Home> {

    @Override
    public Home deserialize(JsonParser p, DeserializationContext ctxt) throws IOException, JsonProcessingException {

        ObjectNode node = p.readValueAsTree();

        JsonNode homeName = node.get("homeName");
        JsonNode childName = node.get("childName");

        return new Home(homeName.asText(), childName.asText());
    }

}