Javascript 使用指定的ID生成JSON数组

Javascript 使用指定的ID生成JSON数组,javascript,jquery,json,multidimensional-array,Javascript,Jquery,Json,Multidimensional Array,在过去,我对JSON做了大量的工作,但我从来都不需要编写自己的JSON对象。现在,我的任务是这样做,我有一些困难,创造这样一种方式,将给我带来最少的麻烦的道路上。基本上,我想第一次就把它做好 我的JSON数组最终将变得更大,但出于这些目的,我将保持它的小型化 以下是我目前所做的工作: { "ClassGroup": [ { "id": "123", "classname": "Class 1", "i

在过去,我对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”数据['Student'][0]['id'] 将等于“11”

这样做的问题是,当给定一个类的ID时,我无法轻松找到该类。例如,如果我想找到类“456”的名称,我必须遍历数组直到找到
X
,这样
data['ClassGroup'][X]['id']
将等于“456”,而不仅仅是执行
data['ClassGroup']['456']['classname']

我想做的是重新编写此JSON,以便
$.getJSON
的结果与以下内容一致:

数据['ClassGroup']['123']['classname']=“类1” 数据['ClassGroup']['456']['classname']=“类2” 数据['Student']['11']['last']=“一”

我想你明白了


我这样做对吗?

重写JSON,使其看起来像这样:

{
    "ClassGroup": { /* <- Changed from [ to { */
        "123": {    /* <- The class id is now the array key */
            "id": "123",
            ...
        },
        "456": {
            "id": "456",
            ...
        }
    } /* <- Changed from ] to } */
}
{

“ClassGroup”:{/*重写JSON,使其看起来像这样:

{
    "ClassGroup": { /* <- Changed from [ to { */
        "123": {    /* <- The class id is now the array key */
            "id": "123",
            ...
        },
        "456": {
            "id": "456",
            ...
        }
    } /* <- Changed from ] to } */
}
{

“ClassGroup”:{/*您可以编写一个函数来消除迭代中涉及的所有问题:

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'
});

您可以编写一个函数来消除迭代过程中的所有障碍:

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'
});

您的服务器端代码是什么语言?您可以更改获取此JSON的方式吗?我有一个JSON.NET ArrToObjConverter,您可以将某个数组的对象属性假定为对象属性,您的JSON将返回类似以下内容:“ClassGroup”:{“123”:{“classname”:“Class 1”,“isActive”:“true”,“isExpanded:“false”,“students:[11,22,33,44,55],“isSelected:[11,22,33,44,55]},”456:{“classname:”Class 2“,“isActive:”false“,(…)}}我们正与一家公司合作进行这个项目。我们正在做前端工作,而他们将做银行端(我相信使用ASP和MsSQL)。我们可以随意制作这个JSON数组,另一家公司将编写一个后端脚本,生成一个填充数据的文件。您的服务器端代码是什么语言?您可以更改获取此JSON的方式吗?我有一个JSON.NET ArrToObjConverter,您可以将某个数组的对象属性设为对象属性rty,您的JSON将返回类似这样的内容:“ClassGroup”:{“123”:{“classname”:“Class 1”,“isActive”:“true”,“isExpanded”:“false”,“students”:[11,22,33,44,55],“isSelected”:[11,22,33,44,55]},“456”:{“classname”:“Class 2”,“isActive”:“false”,(…)}我们正在与一家公司合作进行这个项目。我们正在做前端工作,而他们将做银行端(我相信是用ASP和MsSQL)。我们可以随心所欲地制作这个JSON数组,另一家公司将编写一个后端脚本,生成一个填充数据的文件。类id重复两次是否多余?我只是想,如果类集很大,它可能会减少JSON的总体大小。如果你愿意,可以删除它。我只是想表明id是从它的属性中提取的。我很欣赏这些响应。出于某种原因,我在键值对中纠结得太多,以至于我无法想出使用实际id(通常是一个值)作为键的想法。我重新格式化了JSON,一切都很好。谢谢!有两次类id是多余的吗?我只是考虑到如果类集较大,可能会减少JSON的总体大小。如果愿意,可以将其删除。我只想表明id是从它的属性中获取的。我很欣赏这些响应。出于某种原因,我在键值对中纠结得太多,以至于我无法想到使用实际id,这通常是一个值,作为一个键。我重新格式化了我的JSON,一切都很好。谢谢!这是一个非常方便的函数,我肯定会在以后得到一些使用。因为我们有按我们喜欢的方式格式化JSON的特权,我想我将走Iqbal建议的路线。这个web应用程序将涉及大量的跳转使用ID在“表”之间切换。这是一个非常方便的函数,我肯定会在以后的过程中得到一些使用。因为我们有按自己喜欢的方式格式化JSON的特权,我想我要走Iqbal建议的路线。这个web应用程序将涉及大量使用ID在“表”之间切换。