7

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?

1
  • A better approach to do this is using Gson library, take a look at this github.com/google/gson Commented Feb 21, 2016 at 0:40

3 Answers 3

4

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

}

Sign up to request clarification or add additional context in comments.

2 Comments

How I define Name Bean? ;(
NameBean should define with fields and getter setter matches with the json String. Check the Gson user guide for more, it's easy and won't take long minutes
4

instead of

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

try this:

JSONObject jsonObject = new JSONObject(content.toString());
System.out.println(jsonObject.getString("Name") + " " jsonObject.getString("Lastname") + " " + jsonObject.getInt("Age"));

4 Comments

JSONObject does not accept the string argument. The method getString not exist. Thanks for your time ;(
I think you are using a native library, because i used an external json jar and worked fine, I hope you can solve your problem ^^
Thank you. Apparently you use json javax . It is not the same as Gson , or single - json . And can resolve my problem. Thank you.
@VipPunkJoshersDroopy org.json.JSONObject does have a getString(String) method. Though, always make sure to check with has(String) beforehand if the JSON actually contained this field on the respective object
0

I higly recomend http-request built on apache http api.

HttpRequest<Data> httpRequest = HttpRequestBuilder.createGet(yourUri, Data.class)
    .addDefaultHeader("accept", "application/json")
    .build();

public void send(){
   ResponseHandler<Data> responseHandler = httpRequest.execute();
   Data data = responseHandler.orElseThrow(); // returns the data or throws ResponseException If response code is not success
}

Data class which you get as response.

public Data{
   private String Name;
   private String Lastname;
   private int Age;

   // getters and setters
}

I also recommend watching my answer here If you want get response as String

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.