Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/384.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 将JSON字符串反序列化为POJO列表_Java_Json_Google App Engine_Jackson_Google Cloud Endpoints - Fatal编程技术网

Java 将JSON字符串反序列化为POJO列表

Java 将JSON字符串反序列化为POJO列表,java,json,google-app-engine,jackson,google-cloud-endpoints,Java,Json,Google App Engine,Jackson,Google Cloud Endpoints,以下是我的代码,用于反序列化从Google App Engine云端点返回的响应: String jsonString = IOUtils.toString( httpResponse.getEntity().getContent(), "UTF-8"); ObjectMapper mapper = new ObjectMapper(); ArrayList<myPOJO> myList= mapper.readValue(jsonString, new Type

以下是我的代码,用于反序列化从Google App Engine云端点返回的响应:

String jsonString = IOUtils.toString(
    httpResponse.getEntity().getContent(), "UTF-8");

ObjectMapper mapper = new ObjectMapper();
ArrayList<myPOJO> myList= 
    mapper.readValue(jsonString, new TypeReference<ArrayList<MyPOJO>>(){});
但我得到了这个错误:

org.codehaus.jackson.map.JsonMappingException: Can not deserialize instance of java.util.ArrayList out of START_OBJECT token at [Source: java.io.StringReader@547a7880; line: 1, column: 1]

使用Jackson将此JSON反序列化为POJO列表的正确方法是什么?

尝试直接使用映射器反序列化

String jsonString = IOUtils.toString(
        httpResponse.getEntity().getContent(), "UTF-8");

    ObjectMapper mapper = new ObjectMapper();

    List<MyPOJO> myList= mapper.convertValue(jsonString, mapper.getTypeFactory().constructCollectionType(List.class, MyPOJO.class));
String jsonString=IOUtils.toString(
httpResponse.getEntity().getContent(),“UTF-8”);
ObjectMapper mapper=新的ObjectMapper();
List myList=mapper.convertValue(jsonString,mapper.getTypeFactory().constructionCollectionType(List.class,MyPOJO.class));

您必须为
JSON
根对象创建根
POJO
。例如:

class Root {

    private List<Entity> items;

    //getters, setters, toString, etc
}

class Entity {

    private long id;
    private String name;

    //getters, setters, toString, etc
}
印刷品:

Root [items=[Entity [id=12345, name=test1], Entity [id=121212, name=test2]]]

您的jsonString是一个对象,而不是列表。您可以使用jackson库来实现此目的。这不起作用。错误仅更改为
,原因是:org.codehaus.jackson.map.JsonMappingException:无法反序列化java.util.ArrayList的实例超出值\u字符串标记
ObjectMapper mapper = new ObjectMapper();
Root list = mapper.readValue(json, Root.class);
System.out.println(list);
Root [items=[Entity [id=12345, name=test1], Entity [id=121212, name=test2]]]