it-swarm.com.ru

Как получить доступ к массиву в объекте 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);
    }

Проблема в том, что я не могу получить доступ к элементам в объекте JSON, даже если dataJS действительно отображается в консоли. Идеи?

Спасибо

13
AnApprentice

Это потому, что ваш базовый объект также является массивом.

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

Я подозреваю, что это будет работать

12
Darko Z

jSON, который вы возвращаетесь, на самом деле сам массив, так что ...

dataJS[0].comments[0].created_at

будет 2011-02-09T14:42:42-08:00 и т. д.

И dataJS, и comments являются массивами и нуждаются в индексах для доступа к соответствующим элементам.

5
jondavidjohn

Возвращаемый объект сам по себе является массивом, поэтому, чтобы перейти к первому комментарию (в качестве примера), вы должны получить к нему доступ:

dataJS[0].comments[0]

3
Brian Driscoll
console.log(dataJS);
console.log(dataJS[0].eee1);
console.log(dataJS[0].comments[0]);
3
Detect

Сделайте что-то вроде этого:

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
limc

Да, как уже говорили другие, JSON на самом деле является массивом (одного объекта). Так что вам нужно будет ссылаться на индекс.

Интересно, что (для меня) ваша строка результата успешно прошла валидацию как JSON. До сих пор я предполагал, что для того, чтобы быть действительным JSON, это должен был быть объект (т. Е. {}). 

1
Ryan Miller

Вы должны указать dataType в запросе ajax как «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);
            }
        });
0
yasankarj