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

Спасибо

Ответ 1

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

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

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

Ответ 2

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

dataJS[0].comments[0].created_at

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

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

Ответ 3

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

dataJS[0].comments[0]

Ответ 4

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

Ответ 5

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

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;

Ответ 6

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

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

Ответ 7

Вы должны указать 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);
            }
        });

Ответ 8

//Вы можете использовать AJAX, например, если вы берете JSON из API->

let xhr = new XMLHttpRequest();
xhr.onreadystatechange = () => {
  if (xhr.status === 200 && xhr.readyState === 4) {
    let response = JSON.parse(xhr.responseText);
    //here i loop through the Object
    for (let key in response) {
     // Comments it an array so you can loop through it with a loop
      for (let i = 0; i < response[key].comments.length; i++) {
        // in order to display it in the DOM please provide after the [i] 
        // the value that you want to display example -> [i].created_at
       console.log(response[key].comments[i]);
      }
    }
  }
};
xhr.open("GET", "Put the name of the file/ the url of the site that the json appear in", true);
xhr.send();

Ответ 9

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