使用Google的Gson将Json转换为java对象

我正在使用Spring Social FqlQuery从facebook获取数据。 这是我从facebook获得的JSON响应。 我得到Json输出的控制器在这里,

fql = "SELECT work FROM user WHERE uid = me()"; facebook.fqlOperations().query(fql, new FqlResultMapper() { public Object mapObject(FqlResult result) { List list = (List) result.getObject("work"); for (Object object : list) { JsonHelper jsonHelper = new JsonHelper(); Gson gson = new GsonBuilder().setPrettyPrinting().create(); String jsonOutput = gson.toJson(object); System.out.println(jsonOutput); gson.fromJson(jsonOutput, JsonHelper.class); } 

System.out.println for for循环输出多个json,如下所示:

 { "employer": { "id": 129843057436, "name": "www.metroplots.com" }, "location": { "id": 102186159822587, "name": "Chennai, Tamil Nadu" }, "position": { "id": 108480125843293, "name": "Web Developer" }, "start_date": "2012-10-01", "end_date": "2013-05-31" } { "employer": { "id": 520808381292985, "name": "Federation of Indian Blood Donor Organizations" }, "start_date": "0000-00", "end_date": "0000-00" } 

这是我的助手class:

 import java.util.List; public class JsonHelper { class Employer{ private int id; private String name; public int getId() { return id; } public void setId(int id) { this.id = id; } public String getName() { return name; } public void setName(String name) { this.name = name; } } class Location{ private int id; private String name; public int getId() { return id; } public void setId(int id) { this.id = id; } public String getName() { return name; } public void setName(String name) { this.name = name; } } class Position{ private int id; private String name; public int getId() { return id; } public void setId(int id) { this.id = id; } public String getName() { return name; } public void setName(String name) { this.name = name; } } //Edited After here private String start_Date; private String end_Date; private Employer employer; private Location location; private Position position; public String getStart_Date() { return start_Date; } public void setStart_Date(String start_Date) { this.start_Date = start_Date; } public String getEnd_Date() { return end_Date; } public void setEnd_Date(String end_Date) { this.end_Date = end_Date; } public Employer getEmployer() { return employer; } public void setEmployer(Employer employer) { this.employer = employer; } public Location getLocation() { return location; } public void setLocation(Location location) { this.location = location; } public Position getPosition() { return position; } public void setPosition(Position position) { this.position = position; } } 

当我尝试将json对象转换为java对象时,如上所述,我得到了这个exception。

 HTTP Status 500 - Request processing failed; nested exception is com.google.gson.JsonSyntaxException: java.lang.IllegalStateException: Expected BEGIN_ARRAY but was BEGIN_OBJECT at line 6 column 16 

任何人都可以帮助我,我错了。 请帮我转换json到java对象。 希望我的问题很清楚。 提前致谢。

编辑为控制器:

 facebook.fqlOperations().query(fql, new FqlResultMapper() { public Object mapObject(FqlResult result) { List json = new ArrayList(); List list = (List) result.getObject("work"); for (Object object : list) { Gson gson = new GsonBuilder().setPrettyPrinting().create(); String jsonOutput = gson.toJson(object); System.out.println(jsonOutput); JsonHelper jsonHelper = gson.fromJson(jsonOutput, JsonHelper.class); json.add(jsonHelper); System.out.println(jsonHelper.getStart_Date()); } for (JsonHelper jsonHelper : json) { System.out.println(jsonHelper.getStart_Date()); } return list; } }); 

由于我没有实际的api访问权限,所以我在示例中尝试使用静态值。 首先在你的JsonHelper类中,用int替换所有int ,因为json中提到的值是long类型和String 。 然后尝试如下所述:

  String str = "{\n" + " \"employer\": {\n" + " \"id\": 129843057436,\n" + " \"name\": \"www.metroplots.com\"\n" + " },\n" + " \"location\": {\n" + " \"id\": 102186159822587,\n" + " \"name\": \"Chennai, Tamil Nadu\"\n" + " },\n" + " \"position\": {\n" + " \"id\": 108480125843293,\n" + " \"name\": \"Web Developer\"\n" + " },\n" + " \"start_date\": \"2012-10-01\",\n" + " \"end_date\": \"2013-05-31\"\n" + "}"; List json = new ArrayList(); Gson gson = new Gson(); JsonHelper users = gson.fromJson(str, JsonHelper.class); json.add(users); for (JsonHelper js_obj : json) { System.out.println(js_obj.getEmployer().getId()); System.out.println(js_obj.getEmployer().getName()); }