Jestem w trakcie aktualizacji Jacksona z wersji 1.9.4 do wersji 2.2.0. Przejście było płynne, z tym że nie mogę uzyskać analizy parsowania dla obiektów działających. W wersji 1.9.4 mogłem to zrobić:Parsowanie tablicy obiektów JSON przy użyciu pakietu Jackson 2.0
private List<Subjects> mSubjects;
mSubjects = objectMapper.readValue(subjectsJsonArrayNode, new TypeReference<List<Subjects>>() {});
Z wersją 2.2.0 otrzymałem błąd "nie można rozwiązać metody" podczas kompilacji. ObjectMapper plik header Jacksona do 1.9.4 zawiera te readValue metody 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)
A nagłówek pliku Jackson 2.2.0 za:
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)
Więc muszę przełączyć się z przechodzącą JsonNode do JsonParser, ale nie jestem całkiem pewien, jak dokonać tego przejścia. To powiedziawszy, nie jestem pewien, czy idę nawet właściwą drogą, ponieważ JsonParser jest zdefiniowany jako klasa abstrakcyjna, więc nie mogę nawet łatwo zainicjować instancji, aby się z nią bawić.
Dla tych, którzy przychodzą bez odpowiedzi, o to rozwiązanie tymczasowe mam w miejscu gdzie iteracji i ręcznie analizować każdy obiekt:
private List<Subjects> mSubjects = new ArrayList<Subjects>();
for(JsonNode subjectJsonNode : subjectsJsonArrayNode) {
mSubjects.add(objectMapper.treeToValue(subjectJsonNode, Subject.class));
}
trawers() załatwił sprawę. Wielkie dzięki Brian. Twoje zdrowie! – Mark
nie działają, jeśli klasa Foo ma niestandardowy deserializator – herau
Alternatywnie można użyć wywołania 'ObjectMapper.treeToValue()', zaprojektowanego do robienia tego, co chcesz. – StaxMan