2015-11-11 1 views
1
{ 
"batchcomplete": "", 
"continue": { 
    "grncontinue": "0.262157292819|0.262157407383|17998004|0", 
    "continue": "grncontinue||" 
}, 
"query": { 
    "pages": { 
     "29839198": { 
      "pageid": 29839198, 
      "ns": 0, 
      "title": "Paradox (film)", 
      "extract": "Paradox is a 2010 science-fiction television film starring Kevin Sorbo, Steph Song and Christopher Judge, directed by Brenton Spencer, and based on a three-part graphic novel mini-series by Christos Gage.\n\n" 
     } 
    } 
} 

Я пытаюсь найти решение для разбора приведенного выше результата JSON из API Википедии. Проблема в том, что поскольку объект «29839198» (в данном случае) будет отличаться от каждого вызова API, я не могу найти решение для его синтаксического анализа.JSON из Wikipedia API с GSON - объект Parse с переменным именем

Это то, что я до сих пор:

URL url = new URL("https://en.wikipedia.org/w/api.php?action=query&prop=extracts&format=json&exintro=&explaintext=&generator=random&grnnamespace=0"); 
HttpURLConnection request = (HttpURLConnection) url.openConnection(); 
request.connect(); 

JsonElement jsonElement = new JsonParser().parse(new InputStreamReader((InputStream) request.getContent())); 
JsonElement page = jsonElement.getAsJsonObject().get("?????"); 

Обычно я переключил бы вне «????» часть с именем объекта.

+1

Не страницы Карта <Целое число, страница>? – beresfordt

+1

Я бы рекомендовал использовать библиотеку Джексона (http://wiki.fasterxml.com/JacksonHome/). Да, вы должны написать еще несколько классов с аннотациями, но я даю вам хорошую абстракцию, и когда вы измените свой код через несколько лет, вы все равно сможете понять свой код. – Schrieveslaach

+0

@beresfordt Не так ли? Кажется, что вложенные объекты JSON мне – Petter

ответ

1

Использование entrySet получить JsonElement:

 URL url = new URL("https://en.wikipedia.org/w/api.php?action=query&prop=extracts&format=json&exintro=&explaintext=&generator=random&grnnamespace=0"); 
     HttpURLConnection request = (HttpURLConnection) url.openConnection(); 
     request.connect(); 

     JsonElement jsonElement = new JsonParser().parse(new InputStreamReader((InputStream) request.getContent())); 
     JsonElement pages = jsonElement.getAsJsonObject().get("query").getAsJsonObject().get("pages"); 

     Set<Entry<String, JsonElement>> entrySet = pages.getAsJsonObject().entrySet(); 

     JsonElement yourDesiredElement = null; 

     for(Map.Entry<String,JsonElement> entry : entrySet){ 
      yourDesiredElement = entry.getValue(); 
     } 

     //null check for yourDesiredElement 

Надеется, что это помогает.

+0

Спасибо! Использование entrySet было решением :) – Petter

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