如何从JSON中提取“提取”属性?
问题描述:
我从下面的链接试图读取JSON数据:如何从JSON中提取“提取”属性?
我能够读取内页整个数据属性使用:
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": "..."
}
也就是说,pages
内query
是一个对象,而不是一个数组。 然后,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);
}
感谢您的评论。但我得到一个'方法keySet()未定义的类型JSONObject'错误。 –
@KaushikS也许你正在使用旧版本。你能升级到“20160810”吗?如果不让我知道,以及您使用的版本。 – janos
谢谢兄弟。完美工作。如果可以问这里,你可以发布一些链接,我可以学习这个JSON解析与Java,如果可以的话? @janos –