2012-01-07 96 views
0

我试图使用eval的JSON格式的数据集来检索属性,即价值,使用上

[{"item_one":1, "item_two": 2, "item_three": 3}] 

我使用dajax的Ajax调用像Django的内JSON数据的eval()这样的:

@dajaxice_register 
def get_current_id(request): 
    home_timeline = oauth_req(
    'http://api.twitter.com/1/statuses/home_timeline.json?count=1', 
    settings.TWITTER_TOKEN_KEY, 
    settings.TWITTER_TOKEN_SECRET 
    ) 
    return simplejson.dumps({'home_timeline': home_timeline }) 

它得到这个,因为它的回调:

function get_current_id_callback(data){ 
     if(data==Dajaxice.EXCEPTION){ 
     alert('Error! Something happens!'); 
     } 
     else{ 
     console.log(data.home_timeline); 
     } 
    } 

我不明白为什么这给了我不确定:

console.log(eval(data.home_timeline.item_one)) 

什么是检索item_one的值的正确方法?

谢谢。

+3

放弃这一点。目前常用的每种语言都有一个内置的JSON解析器,或者随时可用。特别是Javascript。查看'JSON.parse'。它比“eval”更安全,效率更高。你的框架甚至可能已经为你做了。 – cHao 2012-01-07 02:00:37

+2

@cHao,使用JSON.parse仍然没有正确解析'data.home_timeline.item_one',给出:'未捕获的SyntaxError:意外的令牌ü get_current_id_callback:8000 /:64'它是:'console.log(JSON.parse (data.home_timeline.id_str));'谢谢。 – neridaj 2012-01-07 03:21:28

+0

而当你说'console.log(data)'(或可能'console.log(data.home_timeline)'),那会给你什么? – cHao 2012-01-07 03:43:53

回答

0

如果data仍然是一个字符串,那么你需要eval(data)(或者@cHao建议,解析它)来产生一个能够被取消引用的JavaScript对象。

如果它不只是一个字符串,它不应该首先评估。

+0

当遍历包含一个索引的对象时,eval和JSON.parse都可以工作 - 不必循环遍历一个索引。这工作:'$ .each(eval(data.home_timeline),function(i,item){console.log(item.id_str); });'这也适用:'$ .each(JSON.parse (data.home_timeline),function(i,item){console.log(item.id_str); });'。那么,为什么没有'$ each()'就不能工作? – neridaj 2012-01-07 19:18:06

+0

谢谢,想通了:'parsed = JSON.parse(data.home_timeline); console.log(parsed [0] .id_str);' – neridaj 2012-01-07 20:54:16