如何从 Java HTTPResponse 解析 JSON?

2022-08-31 13:52:47

我有一个HttpResponse对象,用于我刚刚发出的Web请求。响应采用 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

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

  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);

答案 2

使用 JSON Simple,

http://code.google.com/p/json-simple/

它有一个小的占地面积,没有依赖性,所以它非常适合Android。

你可以做这样的事情,

Object obj=JSONValue.parse(buffer.tString());
JSONArray finalResult=(JSONArray)obj;