Search code examples
javajsonhttphttpresponsejson-simple

Parsing a JSON from HTTP Response in Java


Hi I am using Client Http (apache), and json-simple.

I want to access the attributes of the json response, and then use them.

Any idea how to do this? I read a post and did not work as it but me.

This is my answer json:

{"Name":"myname","Lastname":"mylastname","Age":19}

This is my code java:

DefaultHttpClient httpClient = new DefaultHttpClient();

HttpGet getRequest = new HttpGet(
    "http://localhost:8000/responsejava");
getRequest.addHeader("accept", "application/json");

HttpResponse response = httpClient.execute(getRequest);

if (response.getStatusLine().getStatusCode() != 200) {
    throw new RuntimeException("Failed : HTTP error code : "
             + response.getStatusLine().getStatusCode());
}

BufferedReader br = new BufferedReader(
    new InputStreamReader( 
        (response.getEntity().getContent())
    )
);

StringBuilder content = new StringBuilder();
String line;
while (null != (line = br.readLine())) {
    content.append(line);
}

Object obj=JSONValue.parse(content.toString());
JSONObject finalResult=(JSONObject)obj;
System.out.println(finalResult);

httpClient.getConnectionManager().shutdown();

I printed null, What am I doing wrong?


Solution

  • Better and easier to use Gson

    Gson gson = new Gson;
    NameBean name = gson.fromJson(content.toString(),NameBean.class)
    

    NameBean is the object where you persist the json string.

    public class NameBean implements Serializable{
    public String name;
    public String lastname;
    public Int age;
    
    public String getName() {
        return name;
    }
    
    public void setName(String name) {
        this.name = name;
    }
    
    public String getLastname() {
        return lastname;
    }
    
    public void setLastname(String lastname) {
        this.lastname = lastname;
    }
    
    public Int getAge() {
        return age;
    }
    
    public void setAge(Int age) {
        this.age = age;
    }
    

    }