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

时间:2018-01-16 18:01:13

标签: java json jackson

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

让我说我有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>>(){});

当然没有这样的方法签名,看起来杰克逊可能有类似的东西,但我找不到它。

2 个答案:

答案 0 :(得分:0)

为了读取(可能是一个大的)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();
        }
    }
}

答案 1 :(得分:0)

以上来自JB Niznet的评论正是我所寻求的。再次感谢。基本上,此处示例中的相关行将如下所示:

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