2

我是 Javascript 的新手,并试图提取一些存储在对象中的文本。

该对象被定义为一个对象字面量,并被传递给调用该函数的Javascript 脚本中的函数。脚本(和对象)具有以下结构:

foo({
  "query": {
  "count": "2",
  "created": "2009-07-25T08:17:54Z",
  "lang": "en-US",
  },
  "results": {
   "result": [
    {
     "abstract": "<b>Pizza</b> Hut®. Order Online for Delivery or Carry-out. Fast &amp; Easy.",
     "title": "<b>Pizza</b> Hut"
    },
    {
     "abstract": "Official site of Domino's <b>Pizza</b> delivery chain, which offers thin crust, deep dish, and hand tossed <b>pizzas</b> with a variety of side items and beverages. Site <b>...</b>",
     "title": "Domino's <b>Pizza</b>"
    }
   ]
  }
 }
});

该对象被传递给名为“foo”的回调函数:

function foo(o){
  var out = document.getElementById('container');
  out.innerHTML = o.query.count;
}

我的问题:我知道如何使用上面的回调函数打印出查询计数变量,但我不知道如何打印出结果数组中第一个结果的标题。

如何更改回调函数以显示第一个结果标题?此外,是否有一个 foreach 语句,我可以在其中打印出所有结果中的所有标题?

谢谢!

更新:此代码的 JSBIN 位于: http: //jsbin.com/ejiwa/edit

4

4 回答 4

4

以下工作是否有效:

o.results.result[0].title

获得第一个结果标题?并迭代所有结果:

for (var i=0; i<o.results.result.length; i++) {
    var result = o.results.result[i];
    alert(result.title);
}

编辑:你确定你复制对了吗?这是我在 Rhino 中得到的:

js> o = {
  "query": {
  "count": "2",
  "created": "2009-07-25T08:17:54Z",
  "lang": "en-US",
  },
  "results": {
   "result": [
    {
     "abstract": "<b>Pizza</b> Hutr. Order Online for Delivery or Carry-out. Fast &amp; Easy.",
     "title": "<b>Pizza</b> Hut"
    },
    {
     "abstract": "Official site of Domino's <b>Pizza</b> delivery chain, which offers thin crust, deep dish, and hand tossed <b>pizzas</b> with a variety of side items and beverages. Site <b>...</b>",
     "title": "Domino's <b>Pizza</b>"
    }
   ]
  }
 }

js> o.results.result[0].title
<b>Pizza</b> Hut
于 2009-07-25T20:30:32.333 回答
1

从 JSON 中可以看出,该对象有一个名为“results”的属性,其中包含一个名为“result”的属性,它是一个对象数组。

要显示第一个,您只需像之前对 count 所做的那样做,但只需按照标题的结构即可。

o.query.results.result[0].title

要遍历每个结果,您可以像数组一样简单地遍历 result 属性,例如:

var results = o.query.results.result;
for(var i = 0; i < results.length; i++) {

}

JSON 只是 JavaScript 代码。将 JSON 片段视为 JavaScript 对象声明,您应该可以毫无问题地理解它。

于 2009-07-25T20:30:52.163 回答
1

我不确定回调函数中的 o 参数是什么。我通常将 XMLHttpRequest 或 ActiveXObject 分配给全局 var req。

然后使用回调:

 function json_callback() {
    if (req.readyState == 4) {
            if (req.status == 200) {
                    jsonObj = eval("(" + req.responseText + ")");
                    var out = document.getElementById('container');
                    out.innerHTML = jsonObj.query.count;
            }
       }
 }

应该注意的是,只有在您完全信任服务器和服务器发送给客户端的数据时,才应该使用 eval()。有可用的 JSON 解析器,它们实际上比 eval() 更快,也更安全,因为它们将其限制为仅 JSON,而 eval() 可以解析和执行所有可能存在安全风险的 JavaScript。预计在下一版本的 ECMAScript 中将内置一个标准的 JSON 解析器。

于 2009-07-25T20:33:57.663 回答
1

实际对象的结构与您编写的略有不同。results实际上是 的一个元素query。所以试试这个:

o.query.results.result[0].title
于 2009-07-25T20:38:13.317 回答