У меня есть JSON со структурой:
{
"id" : "123",
"name" : [ {
"id" : "234",
"stuff" : [ {
"id" : "345",
"name" : "Bob"
}, {
"id" : "456",
"name" : "Sally"
} ]
} ]
}
Я хочу сопоставить со следующей структурой данных:
Class01
@Getter
public class Class01{
private String id;
@JsonDeserialize(using = Class01HashMapDeserialize.class)
private ArrayList<Class02> name;
}
Class02
@Getter
public class Class02{
private String id;
private ArrayList<Class03> stuff;
}
Class03
@Getter
public class Class03{
private String id;
private String name;
}
В моем основном методе я использую ObjectMapper с objectMapper.readValue(jsonString,new TypeReference<ArrayList<Class02>>(){})
, чтобы сопоставить этот JSON с моим Class01. Этот класс успешно десериализует массив Class02 в массив имен.
Когда дело доходит до второго массива, я не знаю, как дальше десериализовать, поскольку я не могу получить доступ к тексту json из class02 запись материала.
@Override
public ArrayList<Class02> deserialize(JsonParser parser, DeserializationContext ctxt) throws IOException {
ArrayList<Class02> ret = new ArrayList<Class02>();
ObjectCodec codec = parser.getCodec();
TreeNode classes02 = codec.readTree(parser);
if (classes02.isArray()) {
for (JsonNode class02 : (ArrayNode) classes02) {
if(classe02.get("stuff").isArray()){
ObjectMapper objectMapper = new ObjectMapper();
ArrayList<Class03> classes03 = objectMapper.readValue(class02.get("stuff").asText(), new TypeReference<ArrayList<Class03>>(){});
}
ret.add(new Class02(class02.get("id").asText(), classes03));
}
}
return ret;
}