繁体   English   中英

如何将Jackson JsonNode转换为某些用户定义对象的列表?

[英]How do you convert a Jackson JsonNode to a List of some user defined object?

使用Jackson将内部Json数组提取到Java列表的最佳方法是什么(无需转换整个Json结构)。

可以说我有杰森:

{
  "objects":"that",
  "I":"dont care about",
  "objectsiwant":[{object1, object2,...}]
}

最后,我想列出一些我拥有的Pojo:

List<MyPojo> myPojoList;

看来我应该能够执行以下操作:

ObjectMapper mapper = new ObjectMapper();
JsonNode rootNode = mapper.readTree(json);
JsonNode internalNode = rootNode.path("objectsiwant");
List<MyPojo> myPojoList = mapper.readValue(internalNode, new TypeReference<List<MyPojo>>(){});

当然,没有这样的方法签名,并且在Jackson中似乎有一些与此非常相似的东西,但是我一直找不到。

为了读取一部分(可能很大)的JSON,您可以使用具有强大DSL的json-path库来选择一个或多个JSON节点:

import com.jayway.jsonpath.JsonPath;
import net.minidev.json.JSONArray;

public class JsonPathTest
{
    public static void main(String[] args) {
        try (InputStream is = Files.newInputStream(Paths.get("C://temp/test.json"))) {
            JSONArray objectsiwant = JsonPath.read(is, "$.objectsiwant");
            System.out.println(objectsiwant.get(0));  // HashMap
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}

上面来自JB Niznet的评论正是我想要的。 再次感谢。 基本上,示例中的相关行如下所示:

List<MyPojo> myPojoList = mapper.readerFor(new TypeReference<List<MyPojo>>(){}).readValue(internalNode);

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM