使用jQuery的多级JSON

Multi Level JSON with jQuery

本文关键字:JSON 多级 jQuery 使用      更新时间:2023-09-26

我试图创建一些json是几个层次深,我有麻烦在2个地方。首先,要确保格式正确。我还想添加一个"level_two"到数据集。

第二个是解析数据。如有任何帮助,我将不胜感激。

谢谢!

JSON:
{
    "math_problems": [
        {
            "level_one": {
                "addition": {
                   "problem": {
                        "data_set": [
                            3,
                            2
                        ]
                    },
                    "problem": {
                        "data_set": [
                            5,
                            1
                        ]
                    }
                },
                "subtraction": {
                    "problem": {
                        "data_set": [
                            4,
                            2
                        ]
                    }
                },
                "division": {
                    "problem": {
                        "data_set": [
                            3,
                            2
                        ]
                    }
                },
                "multiplication": {
                    "problem": {
                        "data_set": [
                            3,
                            2
                        ]
                    }
                }
            }
        }
    ]
}

jQuery:
$.getJSON('/data/math.json', function(data) {
        var the_data = [];
        $.each(data,function(index,item) {
            i = index;
            number_one = item[0]['level_one']['addition']['problem']['data_set'][0];
            number_two = item[0]['level_one']['addition']['problem']['data_set'][1];
            the_data += number_one + " + " + number_two;
        });
        $('<ul/>', {
            'class': 'my-new-list',
            html: the_data + " = " + (number_one + number_two)
        }).appendTo('body');
    });

我希望能够解析数据拉出说:

level_one>加法>问题1> 3,2

level_two> subtraction>问题1> 4,3

任何想法?

问题是,您在同一级别的散列中定义了相同的键:

"problem": {
    "data_set": [
        3,
        2
    ]
},
"problem": {
    "data_set": [
        5,
        1
    ]
}

它们将相互碰撞并覆盖。把它重新构造成一个数组,你就可以了。

所以正确的JSON是:

var object = {
    levelOne: {
        // etc.
    },
    levelTwo: {
        // etc.
    }
}

使用JSON.parse()进行解析,然后遍历它,如下所示:

object.level_one.prop.prop1;
object.level_two.otherProp.otherProp2;

JSON被转换为javascript对象,因此您在"加法"上重复关键字"问题"的事实使第二个"问题"覆盖第一个。

你应该重新考虑你的json结构,也许像:

"math_problems" : {
  "level_one": {
    "addition": {
      "problems": [
        {
          "data_set": [3,2]
        },
        {
          "data_set": [5,1]
        }
      ]
    },
    "subtraction": ...     
  }  
}

或者,如果问题,问题类型和级别是高度动态的:

"math_problems" : {    
  "levels": [
    {
      "name" : "Level one",
      "problems": [
        {
          "type" : "addition",
          "data_set": [3,2]
        },
        {
          "type" : "addition",
          "data_set": [5,1]
        },
        {
          "type" : "subtraction",
          "data_set": [2,1]
        }
      ]
    },
    {
      "name" : "Level two",
      "problems": [
        ...
      ]
    }
  ]
}