J'essaie d'accéder à la valeur de certains champs de mon fichier JSON.

console.log( objects.assignments.header.report_type );

Je veux imprimer HOMEWORK


Javascript

$.ajax({

      url:  "/BIM/rest/report/assignment",
      type: "POST",
      dataType : "json",
      data: {
        assessmentId: "206a9246-ce83-412b-b8ad-6b3e28be44e3",
        classroomId:  "722bfadb-9774-4d59-9a47-89ac9a7a8f9a"
      },

      success: function( objects ) {

        console.log( objects.assignments.header.report_type );

        // Result : Uncaught TypeError: Cannot read property 'report_type' of undefined

Données JSON - Je reviens de l'appel AJAX

{
  "assignments": [
    {
      "assignmentId": "SUMMARY",
      "name": "Summary",
      "header": {
        "section_num": "9.4",
        "report_type": "HOMEWORK",
        "problem_set": "Summary",
        "start_time": null,
        "student_am": 0,
        "student_total": 5,
        "due_time": null,
        "submit_am": 0,
        "submit_total": 0,
        "avg_score": "0.0",
        "danger": 0,
        "danger_list": "",
        "warning": 0,
        "warning_list": "",
        "success": 0,
        "success_list": ""
      }
    }
  ]
}

Comment accéder correctement à ces données?

Tout conseil / aide à ce sujet signifie beaucoup pour moi.

Merci d'avance.

2
code8888 13 juil. 2015 à 15:55

5 réponses

Meilleure réponse

assignments est un tableau, vous devez donc accéder à un élément spécifique.

console.log(objects.assignments[0].header.report_type);
                               ^^^
3
Mike 13 juil. 2015 à 12:57

En supposant que vous ayez plusieurs valeurs dans votre tableau et que vous souhaitiez y accéder toutes:

for (var i = 0; i < objects.assignments.length; i++) {
    console.log(objects.assignments[i].header.report_type);
}
0
James Brierley 13 juil. 2015 à 13:35

{} signifie que vous avez un objet qui a des paires clé / valeur

[] signifie que c'est un tableau qui a un index (position si vous voulez), des paires de valeurs.

var myObject = {
    'a_key':'A_value',
    'b_key':'B_value',
    'c_key':'C_value'
    };

var myArray  = [
    'A_value',
    'B_value',
    'C_value'
    ];

Pour accéder à la valeur d'un objet, vous utilisez la clé

 console.log(myObject.a) // A_value
 console.log(myObject['c']) // C_value 

Les valeurs dans les tableaux sont disponibles par l'index (à partir de zéro)

 console.log(myArray[0]) // A_value
 console.log(myArray[2]) // C_value

Vous pouvez avoir un tableau d'objets ou un objet contenant des tableaux

Donc dans votre exemple ce serait:

console.log( objects.assignments[0].header.report_type )
             ^           ^       ^    ^        ^
             variable    key   index  key      key
             name        1st lvl      1st lvl  2nd lvl 
1
Oksid 13 juil. 2015 à 13:24

Puisque assignments est un tableau, vous devez donc spécifier un index pour accéder aux propriétés qu'il contient. Pour accéder à l'utilisation:

objects.assignments[0].header.report_type 
3
Nikhil Batra 13 juil. 2015 à 12:57

$ .ajax ({

  url:  "/BIM/rest/report/assignment",
  type: "POST",
  dataType : "json",
  data: {
    assessmentId: "206a9246-ce83-412b-b8ad-6b3e28be44e3",
    classroomId:  "722bfadb-9774-4d59-9a47-89ac9a7a8f9a"
  },

  success: function( objects ) {

    console.log( objects.assignments[0].header.report_type );
3
AkshayJ 13 juil. 2015 à 12:56