2016-12-25 74 views
1

我從下面的鏈接試圖讀取JSON數據:如何從JSON中提取「提取」屬性?

https://en.wikipedia.org/w/api.php?format=json&action=query&prop=extracts&exintro=&explaintext=&titles=Russell%27s_paradox

我能夠讀取內頁整個數據屬性使用:

JSONObject data=(JSONObject)new JSONTokener(IOUtils.toString(new URL("https://en.wikipedia.org/w/api.php?format=json&action=query&prop=extracts&exintro=&explaintext=&titles=Russell%27s_paradox"))).nextValue(); 
String pageName=data.getJSONObject("query").getString("pages"); 
System.out.println(pageName); 

我想從數據「然後從上面提到的鏈接中提取「屬性,我無法這樣做。我是新來的,我找不到任何資源來學習。

我試過下面的代碼,但我得到一個JSONException。

JSONArray arr=data.getJSONArray("pages"); 
for(int i=0;i<arr.length();i++){ 
String def=arr.getJSONObject(i).getString("extract"); 
System.out.println(def); 
} 

幫助。

回答

1

你試圖解析JSON的結構是這樣的:

{ 
    "batchcomplete": "", 
    "query": { 
    "normalized": [ 
     { 
     "from": "Russell's_paradox", 
     "to": "Russell's paradox" 
     } 
    ], 
    "pages": { 
     "46095": { 
     "pageid": 46095, 
     "ns": 0, 
     "title": "Russell's paradox", 
     "extract": "..." 
     } 

也就是說,pagesquery是一個對象,而不是一個數組。 然後,extract位於另一個嵌套對象中,其中鍵爲46095。 你可以到extract這樣的領域:

JSONObject pages = data.getJSONObject("query").getJSONObject("pages"); 
for (String key : pages.keySet()) { 
    String def = pages.getJSONObject(key).getString("extract"); 
    System.out.println(def); 
} 
+0

感謝您的評論。但我得到一個'方法keySet()未定義的類型JSONObject'錯誤。 –

+0

@KaushikS也許你正在使用舊版本。你能升級到「20160810」嗎?如果不讓我知道,以及您使用的版本。 – janos

+0

謝謝兄弟。完美工作。如果可以問這裏,你可以發佈一些鏈接,我可以學習這個JSON解析與Java,如果可以的話? @janos –