Как я анализирую JSON от Java HTTPResponse?

Я сделал, чтобы 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, если это имеет какое-либо значение.

71
задан Joe Ludwig 16 May 2010 в 21:48
поделиться

3 ответа

Две вещи, которые можно сделать более эффективно:

  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);
83
ответ дан 24 November 2019 в 13:06
поделиться

Джексон , похоже, поддерживает некоторое количество синтаксического анализа JSON прямо из InputStream . Насколько я понимаю, он работает на Android и работает довольно быстро. С другой стороны, это дополнительный JAR-файл, который нужно включить в ваше приложение, увеличивая загрузку и размер флэш-памяти.

2
ответ дан 24 November 2019 в 13:06
поделиться

Используйте JSON Simple,

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

Который имеет небольшой след, без зависимостей, поэтому идеально подходит для Android.

Вы можете сделать что-то вроде этого,

Object obj=JSONValue.parse(buffer.tString());
JSONArray finalResult=(JSONArray)obj;
9
ответ дан 24 November 2019 в 13:06
поделиться
Другие вопросы по тегам:

Похожие вопросы: