Как получить доступ к массиву в объекте JSON? - PullRequest
14 голосов
/ 03 марта 2011

Здравствуйте, у меня есть следующий объект 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 действительно отображается в консоли. Идеи?

Спасибо

Ответы [ 8 ]

13 голосов
/ 03 марта 2011

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

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

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

5 голосов
/ 03 марта 2011

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

dataJS[0].comments[0].created_at

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

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

3 голосов
/ 03 марта 2011
console.log(dataJS);
console.log(dataJS[0].eee1);
console.log(dataJS[0].comments[0]);
3 голосов
/ 03 марта 2011

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

dataJS[0].comments[0]

1 голос
/ 03 марта 2011

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

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

1 голос
/ 03 марта 2011

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

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;
0 голосов
/ 05 января 2016

Вы должны упомянуть 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 голосов
/ 03 марта 2011

JSON должен интерпретироваться с помощью функции eval (после очевидной очистки см. Соображения безопасности eval).Вы уверены, что ваш фреймворк делает это для вас?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...