Get a JSON object from a HTTP response

JavaAndroidJson

Java Problem Overview


I want to get a JSON object from a Http get response:

Here is my current code for the Http get:

protected String doInBackground(String... params) {

	HttpClient client = new DefaultHttpClient();
	HttpGet request = new HttpGet(params[0]);
	HttpResponse response;
	String result = null;
	try {
		response = client.execute(request);			
		HttpEntity entity = response.getEntity();
		
		if (entity != null) {

			// A Simple JSON Response Read
			InputStream instream = entity.getContent();
			result = convertStreamToString(instream);
			// now you have the string representation of the HTML request
			System.out.println("RESPONSE: " + result);
			instream.close();
			if (response.getStatusLine().getStatusCode() == 200) {
				netState.setLogginDone(true);
			}

		}
		// Headers
		org.apache.http.Header[] headers = response.getAllHeaders();
		for (int i = 0; i < headers.length; i++) {
			System.out.println(headers[i]);
		}
	} catch (ClientProtocolException e1) {
		// TODO Auto-generated catch block
		e1.printStackTrace();
	} catch (IOException e1) {
		// TODO Auto-generated catch block
		e1.printStackTrace();
	}
	return result;
}

Here is the convertSteamToString function:

private static String convertStreamToString(InputStream is) {
	
	BufferedReader reader = new BufferedReader(new InputStreamReader(is));
	StringBuilder sb = new StringBuilder();

	String line = null;
	try {
		while ((line = reader.readLine()) != null) {
			sb.append(line + "\n");
		}
	} catch (IOException e) {
		e.printStackTrace();
	} finally {
		try {
			is.close();
		} catch (IOException e) {
			e.printStackTrace();
		}
	}
	return sb.toString();
}

Right now I am just getting a string object. How can I get a JSON object back.

Java Solutions


Solution 1 - Java

The string that you get is just the JSON Object.toString(). It means that you get the JSON object, but in a String format.

If you are supposed to get a JSON Object you can just put:

JSONObject myObject = new JSONObject(result);

Solution 2 - Java

Do this to get the JSON

String json = EntityUtils.toString(response.getEntity());

More details here : https://stackoverflow.com/questions/11129286/get-json-from-httpresponse

Solution 3 - Java

This is not the exact answer for your question, but this may help you

public class JsonParser {
 
    private static DefaultHttpClient httpClient = ConnectionManager.getClient();
 
    public static List<Club> getNearestClubs(double lat, double lon) {
        // YOUR URL GOES HERE
        String getUrl = Constants.BASE_URL + String.format("getClosestClubs?lat=%f&lon=%f", lat, lon);
         
        List<Club> ret = new ArrayList<Club>();
         
        HttpResponse response = null;
        HttpGet getMethod = new HttpGet(getUrl);
        try {
            response = httpClient.execute(getMethod);
             
            // CONVERT RESPONSE TO STRING
            String result = EntityUtils.toString(response.getEntity());
             
            // CONVERT RESPONSE STRING TO JSON ARRAY
            JSONArray ja = new JSONArray(result);
 
            // ITERATE THROUGH AND RETRIEVE CLUB FIELDS
            int n = ja.length();
            for (int i = 0; i < n; i++) {
                // GET INDIVIDUAL JSON OBJECT FROM JSON ARRAY
                JSONObject jo = ja.getJSONObject(i);
                 
                // RETRIEVE EACH JSON OBJECT'S FIELDS
                long id = jo.getLong("id");
                String name = jo.getString("name");
                String address = jo.getString("address");
                String country = jo.getString("country");
                String zip = jo.getString("zip");
                double clat = jo.getDouble("lat");
                double clon = jo.getDouble("lon");
                String url = jo.getString("url");
                String number = jo.getString("number");
                 
                // CONVERT DATA FIELDS TO CLUB OBJECT
                Club c = new Club(id, name, address, country, zip, clat, clon, url, number);
                ret.add(c);
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
 
        // RETURN LIST OF CLUBS
        return ret;
    }
 
}
Again, it’s relatively straight forward, but the methods I’ll make special note of are:

JSONArray ja = new JSONArray(result);
JSONObject jo = ja.getJSONObject(i);
long id = jo.getLong("id");
String name = jo.getString("name");
double clat = jo.getDouble("lat");

Solution 4 - Java

Without a look at your exact JSON output, it's hard to give you some working code. This tutorial is very useful, but you could use something along the lines of:

JSONObject jsonObj = new JSONObject("yourJsonString");

Then you can retrieve from this json object using:

String value = jsonObj.getString("yourKey");

Solution 5 - Java

For the sake of a complete solution to this problem (yes, I know that this post died long ago...) :

If you want a JSONObject, then first get a String from the result:

String jsonString = EntityUtils.toString(response.getEntity());

Then you can get your JSONObject:

JSONObject jsonObject = new JSONObject(jsonString);

Solution 6 - Java

You need to use JSONObject like below:

String mJsonString = downloadFileFromInternet(urls[0]);

JSONObject jObject = null;
try {
    jObject = new JSONObject(mJsonString);
} 
catch (JSONException e) {
    e.printStackTrace();
    return false;
}

...

private String downloadFileFromInternet(String url)
{
    if(url == null /*|| url.isEmpty() == true*/)
    	new IllegalArgumentException("url is empty/null");
    StringBuilder sb = new StringBuilder();
    InputStream inStream = null;
    try
    {
    	url = urlEncode(url);
    	URL link = new URL(url);
    	inStream = link.openStream();
    	int i;
    	int total = 0;
    	byte[] buffer = new byte[8 * 1024];
    	while((i=inStream.read(buffer)) != -1)
    	{
    		if(total >= (1024 * 1024))
    		{
    			return "";
    	    }
    		total += i;
    		sb.append(new String(buffer,0,i));
    	}
    }
    catch(Exception e )
    {
    	e.printStackTrace();
    	return null;
    }catch(OutOfMemoryError e)
    {
   		e.printStackTrace();
    	return null;
	}
    return sb.toString();
}

private String urlEncode(String url)
{
   	if(url == null /*|| url.isEmpty() == true*/)
   		return null;
   	url = url.replace("[","");
   	url = url.replace("]","");
   	url = url.replaceAll(" ","%20");
   	return url;
}

Hope this helps you..

Solution 7 - Java

There is a JSONObject constructor to turn a String into a JSONObject:

http://developer.android.com/reference/org/json/JSONObject.html#JSONObject(java.lang.String)

Solution 8 - Java

If your api is response is a java object, then the string that you got from Outputstream should be in json string format such as

{\"name\":\"xyz\", \"age\":21}

. This can be converted to JSON object in many ways, out of which one way is to use google GSON library. GsonBuilder builder = new GsonBuilder().setPrettyPrinting(); Gson gson = builder.create(); <javaobject> = gson.fromJson(<outputString>, <Classofobject>.class);

Solution 9 - Java

One can do it without Gson also, using Jackson, which implements Json Tree Model.

ObjectMapper mapper = new ObjectMapper();
JsonNode jsonNode = mapper.readTree(responseString);

Solution 10 - Java

1)String jsonString = EntityUtils.toString(response.getEntity()); 2)JSONObject jsonObject = new JSONObject(jsonString);

Attributions

All content for this solution is sourced from the original question on Stackoverflow.

The content on this page is licensed under the Attribution-ShareAlike 4.0 International (CC BY-SA 4.0) license.

Content TypeOriginal AuthorOriginal Content on Stackoverflow
QuestionZapnologicaView Question on Stackoverflow
Solution 1 - JavaRenan BandeiraView Answer on Stackoverflow
Solution 2 - JavarockstarView Answer on Stackoverflow
Solution 3 - JavaHybrid DeveloperView Answer on Stackoverflow
Solution 4 - JavaJoe BirchView Answer on Stackoverflow
Solution 5 - JavaCatalin PirvuView Answer on Stackoverflow
Solution 6 - JavaSushilView Answer on Stackoverflow
Solution 7 - JavaClydeView Answer on Stackoverflow
Solution 8 - JavaRajnishView Answer on Stackoverflow
Solution 9 - JavaRas DwivediView Answer on Stackoverflow
Solution 10 - JavaAjayView Answer on Stackoverflow