如何从 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
我正在尝试从 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