2013-04-24 2 views
0

Я проанализировал несколько простых json в прошлом, но этот дает мне немного больше проблем. Я пытаюсь получить данные из Википедии «в этот день в истории»Android java problem parsing JSON

Example URL with JSON output

Actual URL in regular HTML

Теперь, если вы поп URL JSON в: http://jsonlint.com/, чтобы получить разбивку первый бит проблемы У меня есть после объекта после страниц в этом случае «27993» всегда будет отличаться, так как я могу получить это, если не знаю имя?

Для тестирования у меня есть этот код до сих пор:

JSONObject json = new JSONObject(result); 
input.close(); 
JSONObject json2 = new JSONObject(json.getString("query").toString()); 
JSONObject json3 = new JSONObject(json2.getString("pages").toString()); 
JSONObject json4 = new JSONObject(json3.getString("27993").toString()); 
JSONArray contacts = json4.getJSONArray("revisions"); 
StringBuilder builder = new StringBuilder(); 
builder.append(contacts.getString(0));  
return builder.toString(); 

Это возвращает все в массиве пересмотров, что приводит меня к следующему вопросу ... есть простой способ, чтобы разобрать этот вывод?

EDIT: Пересмотренный код, который решает проблему № 1 Теперь о разборе вывода?

  JSONObject json = new JSONObject(result); 
      input.close(); 
      JSONObject json2 = new JSONObject(json.getString("query").toString()); 
      JSONObject json3 = new JSONObject(json2.getString("pages").toString()); 
      Iterator i = json3.keys(); 
      JSONObject j = null; 
      while (i.hasNext()) { 
       try { 
        String key = i.next().toString(); 
        j = json3.getJSONObject(key); 
       } catch (JSONException e) { 
        e.printStackTrace(); 
       } 
      } 
      JSONArray contacts = j.getJSONArray("revisions"); 
      StringBuilder builder = new StringBuilder(); 
      builder.append(contacts.getString(0));  
      return builder.toString(); 

2-я часть вопроса есть простое решение для разбора такого вывода. Вот надрез:

":" {{рр-перемещение-indef}} {{сентябрь календарь | поплавок = правый}} \ п {{ThisDateInRecentYears}} \ п {{день}} \ n \ n == События == \ n * [[456]] – [[Remistus]], римский генерал ('' [[magister militum]] ''), [[Siege | besiege]] d с [[Готы | Готические]] силы на [[Равенна]], а затем выполнен во Дворце '' в Classis '', за пределами города. \ n * [[1111]] – Высшее галисийское знати во главе с [[Педро Fr \ u00f3ilaz de Traba]] и епископом [[Diego Gelm \ u00edrez]] короной [[Alfonso VII of Le \ u00f3n и Castile | Alfonso VII]] как [»[[королевство Галиция | Царь Галиции]] \". \ N * [[1176]] – [[битва Myriokephalon]] сражается. \ N * [[1462]] – [[Battle of \ u015awiecino]] (также известная как битва \ u017barnowiec) сражается во время [[Тринадцатилетняя война (1454 \ u201366) | Тринадцать лет Война]]. \ N * [[ 1577]] – [[Мир Бержерак]] подписан между [[Генри III Франции]] и [[Гугеноты]]. \ N * [[1630]] – город [[Бостон]]

+3

http://developer.android.com/reference/org/json/JSONObject.html#keys() – Selvin

+0

Спасибо! очень полезно – Paul

+0

У меня нет второго вопроса? – njzk2

ответ

0
JSONObject pages = new JSONObject(json.getJSONObject("pages")); 

// Use this to get IDs 
Iterator<String> keys = pages.keys(); 

// Then iterate 
while (keys.hasNext()) { 
    JSONObject page = new JSONObject(pages.get(keys.next())); 
    // Do something with the page 
} 
+0

Спасибо, я на самом деле сделал свой собственный код из ссылки, которую написал парень, прежде чем вы опубликовали это, но это тоже работает! Любые идеи по анализу вывода? – Paul