web-dev-qa-db-ja.com

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がコンソールに正しく表示されても、JSONオブジェクトのアイテムにアクセスできないことです。アイデア?

ありがとう

17
AnApprentice

これは、ベースオブジェクトも配列であるためです。

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

それはうまくいくと思う

14
Darko Z

あなたが戻ってきたJSONは実際には配列そのものなので、...

dataJS[0].comments[0].created_at

2011-02-09T14:42:42-08:00など...

dataJScommentsはどちらも配列であり、適切な要素にアクセスするにはインデックスが必要です。

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

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);
            }
        });
0
yasankarj