Get a JSON object from a HTTP response

前端 未结 7 1346
粉色の甜心
粉色の甜心 2020-11-27 12:17

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..         


        
相关标签:
7条回答
  • 2020-11-27 12:45

    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);
    
    0 讨论(0)
  • 2020-11-27 12:45

    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..

    0 讨论(0)
  • 2020-11-27 12:46

    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");
    
    0 讨论(0)
  • 2020-11-27 12:49

    Do this to get the JSON

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

    More details here : get json from HttpResponse

    0 讨论(0)
  • 2020-11-27 12:54

    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);
    
    0 讨论(0)
  • 2020-11-27 13:03

    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");
    
    0 讨论(0)
提交回复
热议问题