2013-10-06 68 views
0

我有以下json对象,我想阅读它(从中访问一些数据)在纯Javascript中阅读复杂的JSON

我该怎么用Javascript来做到这一点?

var allSites = 
    {"oldSites": 
     [ 
      { 
       "site0" : "http://site0.com/", 
       "site1" : "http://site1.com/", 
       "site2" : "http://site2.com/" 
      } 
     ], 
    "newSites": 
     [ 
      { 
       "site0" : "http://site0/new", 
       "site1" : "http://site1/new", 
       "site2" : "http://site2/new" 
      } 
     ] 
    }; 

这就是我所做的,但我得到了未定义。

var allSites = eval(allSites); 
alert(allSites.oldSites.site0); 

谢谢。

+1

它不是一个JSON对象,因为JSON只是一个格式约定来表示** JAVASCRIPT LITERAL OBJECTS **以** STRING **的形式提供。如果没有对对象进行评估(无论如何用JSON字符串,你应该使用'JSON.parse') –

+1

试试这个:alert(allSites.oldSites [0] .site0); –

回答

3

如果你的对象是像你所描述的那样定义的,那不是JSON,你不需要使用eval

然后,由于oldSites是一个数组,因此您必须对其进行索引,如oldSites[0]以获取第一个值。

然后,获取检索对象的site0键。

所以,你应该使用:allSites.oldSites[0].site0

+0

谢谢,工作你是完全正确的:) – OussamaLord

+0

如果你没有问题,请标记解决方案之一[如接受](http://stackoverflow.com/help/someone-answers)。 –

2

使用

allSites.oldSites[0].site0 

allSites.oldSites是一个数组。所以你必须迭代使用索引

1

请删除的方括号,这使得oldSites数组

var allSites = 
    {"oldSites": 

      { 
       "site0" : "http://site0.com/", 
       "site1" : "http://site1.com/", 
       "site2" : "http://site2.com/" 
      } 
     , 
    "newSites": 

      { 
       "site0" : "http://site0/new", 
       "site1" : "http://site1/new", 
       "site2" : "http://site2/new" 
      } 

    }; 
+0

我使用这种解决方案工作良好,但我需要一些原因(编码原因)访问site0索引像这样:'allSites.oldSites [0]'而不是'allSites.oldSites.site0'有可能吗? – OussamaLord

+0

好吧我把它变成简单的爱心感谢 – OussamaLord

+0

你的eval声明有'allSites.oldSites.site0',所以删除'['']'是选项,但是这取决于需求:) – Ani