使用Jackson 2.0解析JSON对象数组

标记

我正在将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,我收到一个“无法解析方法”的编译时错误。Jackson的1.9.4的ObjectMapper头文件包含JsonNodes的以下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));
 }
布莱恩·罗奇(Brian Roach)

您可以简单地调用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] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章