我过去在JSON方面做了大量的工作,但我从来不需要编写自己的JSON对象。既然我已经完成了这样的任务,那么我在制作它时会遇到一些麻烦,这会给我带来最少的麻烦。基本上,我想第一次就做好。
我的JSON数组最终会变得更大,但出于这些目的,我会保持它的小。
以下是我目前所做的事情:
{
"ClassGroup": [
{
"id": "123",
"classname": "Class 1",
"isActive": "true",
"isExpanded": "false",
"students": [11, 22, 33, 44, 55],
"isSelected": [11, 22, 33, 44, 55]
},
{
"id": "456",
"classname": "Class 2",
"isActive": "false",
"isExpanded": "false",
"students": [66, 77, 88, 99],
"isSelected": [66, 88, 99]
}
],
"Student": [
{
"id": "11",
"first": "Student",
"last": "One",
"classes": [123],
"isSelected": [123]
},
{
"id": "22",
"first": "Student",
"last": "Two",
"classes": [123],
"isSelected": [123]
}
]
}
目前,阵列中缺少许多学生和班级,因此请忽略您看到的任何缺失的ID。
当这样做,并运行jQuery.getJSON
函数时,我最终会得到一个这样的数组:
数据[' ClassGroup'] [0] [' id']将等于" 123" 数据[' ClassGroup'] [1] [' id']将等于" 456"数据['学生'] [0] [' ID'] 将等于" 11"
这个问题是,当给出一个类的ID时,我不能轻易找到该类。例如,如果我想找到类的名称" 456",我将不得不遍历数组,直到找到X
使data['ClassGroup'][X]['id']
等于&#34 ; 456"而不仅仅是data['ClassGroup']['456']['classname']
。
我想要做的是重写这个JSON,使$.getJSON
的结果与以下内容一致:
数据[' ClassGroup'] [' 123'] [' classname'] =" Class 1" 数据[' ClassGroup'] [' 456'] [' classname'] =" Class 2" 数据['学生'] [' 11'] ['最后'] ="一个"
我想你了解了。
我能以正确的方式解决这个问题吗?
答案 0 :(得分:3)
重写你的JSON,看起来像这样:
{
"ClassGroup": { /* <- Changed from [ to { */
"123": { /* <- The class id is now the array key */
"id": "123",
...
},
"456": {
"id": "456",
...
}
} /* <- Changed from ] to } */
}
答案 1 :(得分:1)
您可以编写一个函数来消除迭代所涉及的所有错误:
function getPropValue(param) {
var obj = data.ClassGroup.filter(function (el) {
return el[param.where] === param.is;
});
return obj[0][param.find];
}
getPropValue({
find: 'classname',
where: 'id',
is: '456'
});