Ich möchte ein JSON
Objekt von einer HTTP-Antwort erhalten:
Hier ist mein aktueller Code für das 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;
}
Hier ist die Funktion convertSteamToString:
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();
}
Im Moment bekomme ich nur ein String-Objekt. Wie kann ich ein JSON-Objekt zurückbekommen?
Antworten:
Die Zeichenfolge, die Sie erhalten, ist nur JSON Object.toString (). Dies bedeutet, dass Sie das JSON-Objekt erhalten, jedoch in einem String-Format.
Wenn Sie ein JSON-Objekt erhalten sollen, können Sie einfach Folgendes eingeben:
JSONObject myObject = new JSONObject(result);
quelle
Error:(47, 50) java: incompatible types: java.lang.StringBuffer cannot be converted to java.util.Map
Dies ist nicht die genaue Antwort auf Ihre Frage, aber dies kann Ihnen helfen
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");
quelle
Ohne einen Blick auf Ihre genaue JSON-Ausgabe ist es schwierig, Ihnen Arbeitscode zu geben. Dieses Tutorial ist sehr nützlich, aber Sie können Folgendes verwenden:
JSONObject jsonObj = new JSONObject("yourJsonString");
Anschließend können Sie von diesem JSON-Objekt Folgendes abrufen:
String value = jsonObj.getString("yourKey");
quelle
Tun Sie dies, um den JSON zu erhalten
Weitere Details hier: Holen Sie sich Json von HttpResponse
quelle
toString()
Funktion - im Grunde genau das, was das OP tut.Sie müssen
JSONObject
wie folgt verwenden: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; }
Hoffe das hilft dir ..
quelle
Um eine vollständige Lösung für dieses Problem zu erhalten (ja, ich weiß, dass dieser Beitrag vor langer Zeit gestorben ist ...):
Wenn Sie eine möchten
JSONObject
, erhalten Sie zuerst eineString
vonresult
:Dann können Sie Ihre
JSONObject
:JSONObject jsonObject = new JSONObject(jsonString);
quelle
Es gibt einen JSONObject-Konstruktor, mit dem ein String in ein JSONObject umgewandelt werden kann:
http://developer.android.com/reference/org/json/JSONObject.html#JSONObject(java.lang.String)
quelle