Comment accéder à un tableau dans un objet JSON?

Bonjour, j'ai l'objet JSON suivant:

[ { "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" } ] 

Cela provient d'une demande $.ajax , dans le succès que j'ai …

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

Le problème est que je ne peux pas accéder aux éléments de l'objet JSON, bien que dataJS ne s'affiche pas correctement dans la console. Des idées?

Merci

C'est parce que votre objet de base est aussi un tableau.

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

Je soupçonne que cela fonctionnerait

Le JSON que vous revenez est en fait un tableau lui-même, alors …

 dataJS[0].comments[0].created_at 

2011-02-09T14:42:42-08:00 , etc …

Les deux dataJS et les comments sont des tableaux et ont besoin d'index pour accéder aux éléments appropriés.

L'objet renvoyé est lui-même un tableau, afin d'accéder au premier commentaire (par exemple), voici comment vous y accédez:

dataJS[0].comments[0]

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

Faites quelque chose comme ça: –

 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; 

Oui, comme d'autres l'ont déclaré, le JSON est en fait un Array (d'un objet unique). Vous devrez donc faire référence à un index.

Fait intéressant (pour moi), votre chaîne de résultat valide avec succès comme JSON. J'ai supposé jusqu'à maintenant que, pour être JSON valide, il devait s'agir d'un objet (c.-à-d., {}).

Vous devez mentionner dataType dans la requête ajax en tant que 'JSON'. Faites de l'utilisateur que vous avez fait comme ci-dessous.

  $.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); } }); 

JSON doit être interprété avec la fonction eval (après la désinfection évidente, voir les considérations de sécurité d'eval). Êtes-vous sûr que votre cadre le fait pour vous?