Java 我如何提取;摘录;来自JSON的属性?
我正在尝试从中读取JSON数据 我可以使用以下方法读取页面内的全部数据属性:Java 我如何提取;摘录;来自JSON的属性?,java,json,org.json,Java,Json,Org.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_p
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);
我想从上面提到的链接的“extract”属性中获取数据,但我无法获取。我是新手,我找不到任何资源来学习这个
我尝试了以下代码,但得到了一个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);
}
JSONArray arr=data.getJSONArray(“页面”);
对于(int i=0;i您试图解析的JSON结构如下:
{
"batchcomplete": "",
"query": {
"normalized": [
{
"from": "Russell's_paradox",
"to": "Russell's paradox"
}
],
"pages": {
"46095": {
"pageid": 46095,
"ns": 0,
"title": "Russell's paradox",
"extract": "..."
}
也就是说,页面
内部的查询
是一个对象,而不是数组。
然后,extract
位于另一个嵌套对象中,键为46095
。
您可以像这样进入提取字段:
JSONObject pages = data.getJSONObject("query").getJSONObject("pages");
for (String key : pages.keySet()) {
String def = pages.getJSONObject(key).getString("extract");
System.out.println(def);
}
使用节点JS,您可以通过其属性名称获取,还可以根据JSON对象的深度通过for循环或递归导航到内部节点。下面是使用for循环获取JSON的2级属性/数据的简单示例:
const jsonStudent = '{"name":"Mond S","fields":{"Age":12,"Class":"Grad 8","School":"In Town"}}';
get_JSON_Data ();
function println (msg)
{
if (DEBUG) {
var jsonDate = (new Date()).toJSON();
console.log( jsonDate + ' myParser ' + msg);
}
}
function get_JSON_Data ()
{
DEBUG = true;
var obj = JSON.parse(jsonStudent); // This obj is json object made from string
for (var k in obj)
{
println ("Got Key " + k + " = " + obj [k]);
if (typeof (obj [k]) == 'object')
{
var felds = obj [k];
for (var f in felds)
println ( " Got fields attr " + f + " = " + felds [f] + ", direct from obj " + obj[k][f]);
}
}
}
==输出将是
2020-12-26T13:06:47.645Z myXMLParser Got Key name = Mond S
2020-12-26T13:06:47.649Z myXMLParser Got Key fields = [object Object]
2020-12-26T13:06:47.649Z myXMLParser Got fields attr Age = 12 ,direct from obj 22
2020-12-26T13:06:47.649Z myXMLParser Got fields attr Class = Grad 8 ,direct from obj Grad 8
2020-12-26T13:06:47.649Z myXMLParser Got fields attr School = In Town ,direct from obj In Town
谢谢你的评论。但是我得到了一个方法keySet()未定义JSONObject类型的错误。@KaushikS可能您使用的是旧版本。您可以升级到20160810
?如果不让我知道,以及您使用的版本。谢谢兄弟。工作得很好。如果可以在这里问的话,您可以发布一些链接,让我可以用Java学习JSON解析,如果可以的话?@janosI不知道我真的知道……在我看来,你被困主要是因为你对JSON和(隐含的)JavaScript缺乏理解。我推荐《JavaScript的好部分》一书。对于Java,我推荐《高效Java》,但这不是解析的具体内容,而是关于Java的“精通”。因此,这些建议是非常广泛的,但从长远来看,这是我能想到的唯一有意义的建议。是的,我是JSON新手,我正在寻找学习资源。感谢您的建议。以下链接将有助于:[