HttpClient httpclient = new DefaultHttpClient();
HttpPost httppost = new HttpPost("http://my.server:8080/android/service.php");
List<NameValuePair> nameValuePairs = new ArrayList<NameValuePair>(2);
nameValuePairs.add(new BasicNameValuePair("action", "getjson"));
httppost.setEntity(new UrlEncodedFormEntity(nameValuePairs));
HttpResponse response = httpclient.execute(httppost);
service.php
生成一个 json 字符串。我如何从我的 response
中获取它?顺便提一句;我已经包含了 GSON
库,我可以使用其中的任何方法吗?
类似的解决方案看起来很丑,imo:best way to handle json from httpresponse android
还有很多更好的方法,对吧?
感谢任何帮助,谢谢
更新:
String json = EntityUtils.toString(response.getEntity());
似乎可以解决问题。只有一个小问题:字符串用括号 []
包裹。我应该手动删除它们吗?它们由 php:s json_encode()
最佳答案
我认为您遇到的问题与我刚刚遇到的问题相似。如果你运行:
String json_string = EntityUtils.toString(response.getEntity()); JSONObject temp1 = new JSONObject(json_string);
上面的代码会抛出一个异常,看起来 JSON 数组括号是罪魁祸首。但是可以将 JSON 数组作为顶级元素!你只需要使用 JSONArray() 而不是 JSONObject:
String json_string = EntityUtils.toString(response.getEntity()); JSONArray temp1 = new JSONArray(json_string);
因此,您必须知道在您的 JSON 代码中获取的是 JSONArray 还是作为 JSONObject 的单个字典。
如果您习惯于 iOS/Objective-C JSON 解析库,它们使用相同的顶级元素来处理 json 字典和 json 数组,因此迁移到 JAVA/Android 世界让我对有两种处理 JSON 的类型感到困惑取决于返回的顶层。
关于java - 从 HttpResponse 获取 json,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11129286/