Używam Spring Social FqlQuery, aby pobrać dane z Facebooka. Oto odpowiedź JSON, którą otrzymuję z Facebooka. Mój kontroler gdzie jestem coraz wyjście JSON jest tutaj,Konwersja JSONa do obiektów java za pomocą Gsona Google'a
fql = "SELECT work FROM user WHERE uid = me()";
facebook.fqlOperations().query(fql, new FqlResultMapper<Object>() {
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 wewnątrz pętli for Wyjścia stwardnienie JSON jak poniżej .:
{
"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"
}
Oto moja klasa Pomocnik:
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;
}
}
Kiedy próbuję konwertować obiekty json na obiekt java, jak to zrobiono powyżej, otrzymuję ten wyjątek.
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
Czy ktoś może mi pomóc, gdzie się mylę. Pomóż mi konwertować json na obiekty java. Mam nadzieję, że moje pytanie jest jasne. Z góry dziękuję.
EDIT wprowadzone do kontrolera:
facebook.fqlOperations().query(fql, new FqlResultMapper<Object>() {
public Object mapObject(FqlResult result) {
List<JsonHelper> json = new ArrayList<JsonHelper>();
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;
}
});
JSON już wspomniano powyżej w przykładzie jest rzeczywiście jsonOject i nie jsonArray, a ty próbujesz rzucić go na liście, to jest to możliwe tylko dla jsonArray, nie JSONObject – Jhanvi
Rejestracja w pętli for dostajesz jsonObject, więc w klasie JsonHelper usuń List lub utwórz tablicę json w pętli for i przeanalizuj całą tablicę razem. – Jhanvi
@Jhanvi: Edytowałem moją klasę POJO tak jak powiedziałeś. Nie dostaję teraz wyjątków. Więc wiąże to wartości, które myślę. po dodaniu umieszczam obiekt JsonHelper wewnątrz tablicyList, a kiedy próbuję uzyskać dostęp do wartości z wnętrza obiektów, otrzymuję "null" jako wynik. Więc możesz dowiedzieć się, gdzie jest źle? –