我是Javascript的新手并尝试提取存储在对象中的一些文本。
该对象被定义为一个对象文字,并被传递给调用该函数的Javascript script中的函数。脚本(和对象)具有以下结构:
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 & 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
答案 0 :(得分: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 & 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
答案 1 :(得分:1)
从JSON中可以看出,该对象有一个名为“results”的属性,它包含一个名为“result”的属性,它是一个对象数组。
要显示其中的第一个,您只需按照已经使用的数量进行操作,但只需按照结构更改为标题。
o.query.results.result[0].title
要遍历每个结果,您可以像数组一样循环遍历结果属性,例如:
var results = o.query.results.result;
for(var i = 0; i < results.length; i++) {
}
JSON只是JavaScript代码。将JSON片段视为JavaScript对象声明,理解它应该没有问题。
答案 2 :(得分: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解析器。
答案 3 :(得分:1)
actual object的结构与你写的略有不同。 results
实际上是query
的元素。所以试试这个:
o.query.results.result[0].title