Sono in procinto di aggiornare Jackson da 1.9.4 a 2.2.0. La transizione è stata fluida, tranne che non riesco a ottenere l'analisi dell'array per gli oggetti che funzionano. In 1.9.4 avrei potuto fare questo:Analisi di un array di oggetti JSON utilizzando Jackson 2.0
private List<Subjects> mSubjects;
mSubjects = objectMapper.readValue(subjectsJsonArrayNode, new TypeReference<List<Subjects>>() {});
con Jackson 2.2.0, ottengo un errore "non può risolvere il metodo" a tempo di compilazione. file di intestazione ObjectMapper di Jackson per 1.9.4 contiene questi metodi readValue per JsonNodes:
public <T> T readValue(JsonNode root, java.lang.Class<T> valueType)
public <T> T readValue(JsonNode root, org.codehaus.jackson.type.TypeReference valueTypeRef)
public <T> T readValue(JsonNode root, org.codehaus.jackson.type.JavaType valueType)
E file di intestazione di Jackson 2.2.0:
public <T> T readValue(JsonParser jsonParser, java.lang.Class<T> tClass)
public <T> T readValue(JsonParser jsonParser, com.fasterxml.jackson.core.type.TypeReference<?> typeReference)
public final <T> T readValue(JsonParser jsonParser, com.fasterxml.jackson.core.type.ResolvedType resolvedType)
public <T> T readValue(JsonParser jsonParser, com.fasterxml.jackson.databind.JavaType javaType)
quindi ho bisogno di passare da un passaggio a un JsonNode JsonParser, ma non sono abbastanza sicuro su come effettuare questa transizione. Detto questo, non sono sicuro se sto andando giù nella giusta direzione perché JsonParser è definito come una classe astratta, quindi non posso nemmeno inizializzare facilmente un'istanza per giocarci.
Per chi viene senza una risposta, qui è una soluzione temporanea che ho in luogo in cui mi iterare e analizzo manualmente ogni oggetto:
private List<Subjects> mSubjects = new ArrayList<Subjects>();
for(JsonNode subjectJsonNode : subjectsJsonArrayNode) {
mSubjects.add(objectMapper.treeToValue(subjectJsonNode, Subject.class));
}
traverso() ha fatto il trucco. Mille grazie, Brian. Saluti! – Mark
non funziona se la classe Foo ha un deserializzatore personalizzato – herau
In alternativa, è possibile utilizzare la chiamata 'ObjectMapper.treeToValue()', progettata per fare ciò che si desidera. – StaxMan