java - 如何从 Java HTTPResponse 解析 JSON?

我有一个用于我刚刚发出的网络请求的 HttpResponse 对象。响应是 JSON 格式,所以我需要解析它。我可以用一种荒谬的复杂方式来做到这一点,但似乎必须有更好的方法。

这真的是我能做到的最好的吗?

    HttpResponse response; // some response object
    Reader in = new BufferedReader(
        new InputStreamReader(response.getEntity().getContent(), "UTF-8"));
    StringBuilder builder= new StringBuilder();
    char[] buf = new char[1000];
    int l = 0;
    while (l >= 0) {
        builder.append(buf, 0, l);
        l = in.read(buf);
    }
    JSONTokener tokener = new JSONTokener( builder.toString() );
    JSONArray finalResult = new JSONArray( tokener );

如果这有什么不同的话,我使用的是 Android。

最佳答案

两件事可以更有效地完成:

  1. 使用 StringBuilder而不是 StringBuffer因为它是更快更小的弟弟。
  2. 使用 BufferedReader#readLine()逐行读取,而不是逐字符读取。

HttpResponse response; // some response object
BufferedReader reader = new BufferedReader(new InputStreamReader(response.getEntity().getContent(), "UTF-8"));
StringBuilder builder = new StringBuilder();
for (String line = null; (line = reader.readLine()) != null;) {
    builder.append(line).append("\n");
}
JSONTokener tokener = new JSONTokener(builder.toString());
JSONArray finalResult = new JSONArray(tokener);

如果 JSON 实际上是单行,那么你也可以去掉循环和构建器。

HttpResponse response; // some response object
BufferedReader reader = new BufferedReader(new InputStreamReader(response.getEntity().getContent(), "UTF-8"));
String json = reader.readLine();
JSONTokener tokener = new JSONTokener(json);
JSONArray finalResult = new JSONArray(tokener);

https://stackoverflow.com/questions/2845599/

相关文章:

json - ASP.net MVC 返回 JSONP

javascript - 将 JSON 对象转换为 pretty-print 的 JSON 的 An

android - 使用 JsonReader.setLenient(true) 在第 1 行第 1

ruby-on-rails-3 - gem install json -v 1.7.3 给出 'Pl

asp.net-mvc - 使用 $.ajax 发布 JSON 数据时如何提供 AntiForger

javascript - JSON字符串到JS对象

java - 使用 jackson 的 ObjectMapper 的 JSON 对象的顺序

javascript - Internet Explorer 8 中未定义的 JSON 对象

java - 如何使用 Gson 解析 JSON 数组

python - 读取相当大的 JSON 文件