2011-03-02 26 views
10

您好,我有以下JSON对象:如何访问JSON对象中的数组?

[ 
{ 
    "comments":[ 
    { 
    "created_at":"2011-02-09T14:42:42-08:00", 
    "thumb":"xxxxxxx", 
    "level":1,"id":214, 
    "user_id":41, 
    "parent_id":213, 
    "content":"<p>xxxxxx</p>", 
    "full_name":"xx K" 
    }, 
    { 
    "created_at":"2011-02-09T14:41:23-08:00", 
    "thumb":"xxxxxxxxxxxxx", 
    "level":0, 
    "id":213, 
    "user_id":19, 
    "parent_id":null, 
    "content":"<p>this is another test</p>", 
    "full_name":"asd asd asd asd asd" 
    } 
    ], 
"eee1":"asdadsdas", 
"eee2":"bbbbb" 
} 
] 

这是从$.ajax请求到来,成功,我有....

success: function (dataJS) { 
     console.log(dataJS); 
     console.log(dataJS[eee1]); 
     console.log(dataJS.comments); 
    } 

问题是我无法访问即使dataJS在控制台中正确显示,也是如此。想法?

感谢

+0

console.log(dataJS.comments [0]); ? – orolo 2011-03-02 21:21:10

+0

您是否检查过响应头的内容类型确实是application/json? – jimmystormig 2011-03-02 21:22:13

回答

5

你回来的JSON实际上是一个数组本身,所以...

dataJS[0].comments[0].created_at 

2011-02-09T14:42:42-08:00等..

两个dataJScomments是数组,并需要索引来访问适当的元素。

+0

这不好吗?我错误地构建了JSON对象吗? – AnApprentice 2011-03-02 21:20:34

+0

不,它不是根据规范构建的,所以不是不正确的,但是你想用什么语法来访问它? – jondavidjohn 2011-03-02 21:22:55

+0

好吧,这就是我需要知道的。谢谢!我会接受一旦stackoverflow让我... – AnApprentice 2011-03-02 21:25:03

3

被返回的对象本身是一个数组,所以去的第一条评论(作为一个例子),这是你将如何访问:

dataJS[0].comments[0]

-2

JSON必须eval功能解释(明显的消毒后,请参阅eval的安全考虑)。你确定你的框架为你做了吗?

+1

是的,jQuery评估JSON。 – BoltClock 2011-03-02 21:21:35

+0

隐含''.ajax'和jquery标签 – jondavidjohn 2011-03-02 21:22:13

+5

'eval'是邪恶的。 – 2011-03-02 21:24:30

9

这是因为您的基础对象也是一个数组。

console.log(dataJS[0].comments[0]); 

我怀疑,将工作

3
console.log(dataJS); 
console.log(dataJS[0].eee1); 
console.log(dataJS[0].comments[0]); 
1

做这样的事情: -

var dataJS = [{"comments":[{"created_at":"2011-02-09T14:42:42-08:00","thumb":"xxxxxxx","level":1,"id":214,"user_id":41,"parent_id":213,"content":"<p>xxxxxx</p>","full_name":"xx K"},{"created_at":"2011-02-09T14:41:23-08:00","thumb":"xxxxxxxxxxxxx","level":0,"id":213,"user_id":19,"parent_id":null,"content":"<p>this is another test</p>","full_name":"asd asd asd asd asd"}],"eee1":"asdadsdas","eee2":"bbbbb"}]; 

var created_at = dataJS[0].comments[0].created_at; 
1

是的,正如其他人所说,JSON实际上是一个单一对象的数组( )。所以你需要引用一个索引。

有趣的是(对我),你的结果串并成功验证为JSON。我认为直到现在,要成为有效的JSON,它必须是一个对象(即{})。

+1

数组也成功验证为JSON ... – 2011-03-02 21:34:39

0

您必须在ajax请求中将dataType提为'JSON'。让用户像下面那样做。

$.ajax({ 
      url: $('#frmAddCourse').attr('action'), 
      type: 'POST', 
      data: $('#frmAddCourse').serialize(), 
      dataType: 'JSON', 
      success: function (data){ 
       Materialize.toast(data['state'],2000); 
      }, 
      error:function(){ 
       Materialize.toast(errorMessage,2000); 
      } 
     });