Jackson을 1.9.4에서 2.2.0으로 업그레이드하는 중입니다. 객체에 대한 배열 구문 분석이 작동하지 않는 것 외에는 전환이 원활했습니다. 1.9.4에서는 다음과 같이 할 수 있습니다.
private List<Subjects> mSubjects;
mSubjects = objectMapper.readValue(subjectsJsonArrayNode, new TypeReference<List<Subjects>>() {});
Jackson 2.2.0에서는 "cannot resolve method"컴파일 타임 오류가 발생합니다. 1.9.4 용 Jackson의 ObjectMapper 헤더 파일에는 JsonNode에 대한 다음 readValue 메서드가 포함되어 있습니다.
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)
그리고 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)
따라서 JsonNode를 JsonParser로 전달하는 방법을 전환해야하지만 전환 방법을 잘 모르겠습니다. 즉, JsonParser가 추상 클래스로 정의되어 있으므로 인스턴스를 쉽게 초기화 할 수 없기 때문에 올바른 경로로 가고 있는지조차 모르겠습니다.
답이없는 사람들을 위해 다음은 각 객체를 반복하고 수동으로 구문 분석하는 임시 솔루션입니다.
private List<Subjects> mSubjects = new ArrayList<Subjects>();
for(JsonNode subjectJsonNode : subjectsJsonArrayNode) {
mSubjects.add(objectMapper.treeToValue(subjectJsonNode, Subject.class));
}
JsonNode.traverse()
메서드를 호출 하여 JsonParser
.
다음과 같은 간단한 예제로 테스트했습니다.
public class App {
public static class Foo {
public int foo;
}
public static void main(String[] args) {
String json = "{\"someArray\":[{\"foo\":5},{\"foo\":6},{\"foo\":7}]}";
ObjectMapper mapper = new ObjectMapper();
JsonNode node = mapper.readTree(json);
node = node.get("someArray");
TypeReference<List<Foo>> typeRef = new TypeReference<List<Foo>>(){};
List<Foo> list = mapper.readValue(node.traverse(), typeRef);
for (Foo f : list) {
System.out.println(f.foo);
}
}
}
출력 :
5
6
7
이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.
침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제
몇 마디 만하겠습니다