2014-01-03 4 views
0

что нового?Разбор большого JSON с булевым и массивом

У меня есть JSON, который имеет логическое значение как элемент 1 и массив объектов «Социо» как элемент 2, и мне нужно читать потоковое вещание, потому что оно очень велико.

My + 5.0Mb JSON вроде: {"response":true,"result":[{SOCIO OBJECT}, {SOCIO OBJECT}...]

Мой первый код (который бросил OutOfMemoryError на API 8, 9) было:

  InputStream source = f.retrieveStream(params[0]); 
      Gson gson = new Gson(); 
      Reader reader = new InputStreamReader(source); 

      Respuesta response = gson.fromJson(reader, Respuesta.class); 
      Socio[] socios = response.getSocio(); 

Мой новый код для потоковой передачи является:

  InputStream source = f.retrieveStream(params[0]); 
      Gson gson = new Gson(); 
      JsonReader reader = new JsonReader(new InputStreamReader(source,"UTF-8")); 
      reader.skipValue(); // Because I have to skip the response... Am i doing this right?? 
      lista = new ArrayList<Socio>(); 
      Socio soc; 
      reader.beginArray(); 
      while (reader.hasNext()) { 
       soc = gson.fromJson(reader, Socio.class); 
       lista.add(soc); 
      } 
      reader.endArray(); 
      reader.close(); 

Но он выбрасывает это исключение, когда он почти загружен:

java.lang.IllegalStateException: Ожидаемое BEGIN_ARRAY но END_DOCUMENT в строке 1 колонки 4716089

на линии, которая имеет код: reader.beginArray();

This is где я на основе моего потокового чтения.

Я читал много разбора с помощью GSON, но я не могу найти ничего для разбора определенного массива из файла JSON. Я знаю только об этом с помощью библиотеки Android Json, но мне нужно использовать GSON. Я также просмотрел 10 первых страниц this search в Google, и я не нашел четкого ответа, и я понял this SO question, но он работает с объектами с именами, поэтому я не могу работать с ними для массива.

Заранее спасибо. С уважением. Рафаэль.

+0

Я поздоровался в начале, но автоматически, SO удаляет это ...: O –

ответ

1

Ваш код передачи неверен, первый skipValue фактически заставляет вас пропускать весь документ.

Попробуйте это:

JsonReader reader = new JsonReader(new InputStreamReader(source,"UTF-8")); 
jsonReader.beginObject(); 
while (jsonReader.hasNext()) { 
    String strName = jsonReader.nextName(); 
    if (strName.equals("response")) { 
     reader.skipValue(); 
    } 
    else if (strName.equals("result")) { 
     jsonReader.beginArray(); 
     while (reader.hasNext()) { 
      soc = gson.fromJson(reader, Socio.class); 
      lista.add(soc); 
     } 
     jsonReader.endArray(); 
    } 
} 
jsonReader.endObject(); 
... 
+0

я своего рода разочарован себя, так как я больше аналитик, чем кодером ... большое спасибо, ваша помощь была очень велика –

+0

You're приветствовать Рафу и don't быть трудно на себя, мы все наши дни, когда мы желаем мы провели лучше. –

Смежные вопросы