如何从JSON中提取“提取”属性?

问题描述:

我从下面的链接试图读取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); 
} 

帮助。

你试图解析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 –