我有一个扁平的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
进行此映射的最佳做法是什么?
答案 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 tutorial和the 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());
}
}