java - 从 HttpResponse 获取 json

标签 java android json

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/

相关文章:

java - 尝试持久化到 SQL Server 时 Spring Boot 应用程序挂起

java - 如何设置定时器但不重复运行

java - ListView 对点击没有反应

java - 制作动画叠加 View

android - 将 SQLite 与外部 SQL 数据库服务器同步

php - DIV 容器保持空白

java - 双重格式验证中的 JSpinner

java - 无法在 Wicket 中过滤下拉选项

php - javascript : unexpected non-whitespace character after JSON data 中的 JSON 错误

json - 如何验证 Bower.json?