使用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>>(){});
当然没有这样的方法签名,看起来杰克逊可能有类似的东西,但我找不到它。
答案 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);