0

我正在尝试创建一些深几级的 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 > 减法 > 问题 1 > 4, 3

有任何想法吗?

4

3 回答 3

2

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

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

这些将相互碰撞并覆盖。将它重组为一个数组,你应该很好。

于 2013-06-04T13:50:37.513 回答
1

所以正确的 JSON 是:

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

解析它是使用JSON.parse()然后遍历它完成的,就像:

object.level_one.prop.prop1;
object.level_two.otherProp.otherProp2;
于 2013-06-04T13:49:56.700 回答
0

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": [
        ...
      ]
    }
  ]
}
于 2013-06-04T13:56:27.920 回答