2009-07-25 31 views
2

我是新来的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 &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

+0

问题是错误的 - 你不解析JSON,你用复合工作的JavaScript变量 – zakovyrya 2009-07-25 20:35:22

+1

@克里斯:有一个在你的代码中的错字 - 您在您的通话结束时有一个额外的大括号到`foo()`。 – RichieHindle 2009-07-25 20:35:50

+0

@Richie:谢谢我没有注意到, – chris 2009-07-25 20:41:13

回答

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); 
} 

编辑:你确定你把它复制了吗?下面是我在犀牛得到:

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 
+0

不,不幸的是它不是 – chris 2009-07-25 20:31:15

1

你可以从JSON看到,对象有一个名为“结果”属性,该属性包含一个名为“结果”属性,它是对象的数组。

要显示的第一个,你只需做你已经与数一样,但只要按照结构标题来代替。

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

要遍历每个结果,可以简单地遍历像阵列的结果属性,例如是这样的:

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

} 

JSON仅仅是JavaScript代码。把JSON片段想象成一个JavaScript对象声明,你应该没有理解它的问题。

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解析器。

1

actual object与你写的结构略有不同。 results实际上是query的元素。所以,试试这个:

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