Java 我如何提取;摘录;来自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

我正在尝试从中读取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);
我想从上面提到的链接的“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新手,我正在寻找学习资源。感谢您的建议。以下链接将有助于:[