Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Converting Json to java objects using Google's Gson

I am using Spring Social FqlQuery to get data's from facebook. Here is the JSON response I am getting from facebook. My controller where i am getting Json output is here,

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 inside for loop Outputs multiple json as below.:

{
  "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"
}

Here is my Helper 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;
}
}

When I try to convert the json objects to java object as done above I am getting this 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

Can any one help me where I am wrong. Please help me converting json to java objects. Hope my question is clear. Thanks in advance.

EDIT MADE TO CONTROLLER:

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;
}

});
like image 946
Vignesh Gopalakrishnan Avatar asked Oct 28 '13 08:10

Vignesh Gopalakrishnan


People also ask

How do you convert JSON to Java object?

We can convert a JSON to Java Object using the readValue() method of ObjectMapper class, this method deserializes a JSON content from given JSON content String.

How do I deserialize JSON with Gson?

Deserialization in the context of Gson means converting a JSON string to an equivalent Java object. In order to do the deserialization, we need a Gson object and call the function fromJson() and pass two parameters i.e. JSON string and expected java type after parsing is finished. Program output.

What is difference between JSON and Gson?

The JSON format was originally specified by Douglas Crockford. On the other hand, GSON is a Java library that can be used to convert Java Objects into their JSON representation. It can also be used to convert a JSON string to an equivalent Java object.


1 Answers

Since i am not having the actual api access, so i am trying it with static value in the example. Firstly in your JsonHelper class, replace all int by long , as the values mentioned in the json are of type long and String. Then try it like mentioned below:

            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<JsonHelper> json = new ArrayList<JsonHelper>();
    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());
    }
like image 170
Jhanvi Avatar answered Sep 30 '22 11:09

Jhanvi