【问题标题】:How can I access multi dimensional JSON data?如何访问多维 JSON 数据?
【发布时间】:2015-10-01 18:06:53
【问题描述】:

我正在尝试访问我的 JSON 文件的某些字段的值。

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

我想打印出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

JSON 数据 - 我从 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": ""
      }
    }
  ]
}

如何正确访问这些数据?

任何提示/帮助对我来说意义重大。

提前致谢。

【问题讨论】:

    标签: javascript jquery arrays ajax json


    【解决方案1】:

    assignments 是一个数组,所以你需要访问一个特定的元素。

    console.log(objects.assignments[0].header.report_type);
                                   ^^^
    

    【讨论】:

      【解决方案2】:

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

      【讨论】:

      • 标头是一个对象。应该是 header.report_type
      • 是的...很着急:)
      【解决方案3】:

      由于assignments 是一个数组,因此您必须指定一个索引才能访问其中的属性。要访问使用:

      objects.assignments[0].header.report_type 
      

      【讨论】:

        【解决方案4】:

        {} 表示您有一个具有键值对的对象

        [] 表示它是一个具有索引(如果您愿意,可以是位置)、值对的数组。

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

        要访问对象的值,请使用键

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

        数组中的值可以通过索引获得(从零开始)

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

        你可以有一个对象数组或包含一些数组的对象

        所以在你的例子中它会是:

        console.log( objects.assignments[0].header.report_type )
                     ^           ^       ^    ^        ^
                     variable    key   index  key      key
                     name        1st lvl      1st lvl  2nd lvl 
        

        【讨论】:

          【解决方案5】:

          假设您的数组中有多个值并且想要全部访问它们:

          for (var i = 0; i < objects.assignments.length; i++) {
              console.log(objects.assignments[i].header.report_type);
          }
          

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2017-10-28
            • 2020-02-01
            相关资源
            最近更新 更多