如何从 JSON 中提取 "extract" 属性?

How do I extract the "extract" attribute from JSON?

我正在尝试从 link 中读取 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);

我想从上面提到的 link 的下一个“提取”属性中获取数据,但我无法做到。我是新手,找不到任何资源来学习这个。

我尝试了以下代码,但出现 JSON异常。

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": "..."
      }

query里面的pages是对象,不是数组。 然后,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);
}

使用节点 JS,您可以通过其属性名称获取,还可以通过 for 循环或递归导航到内部节点,具体取决于 JSON 对象的深度。这是使用 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