【问题标题】:Making a JSON Array With Assigned IDs使用分配的 ID 制作 JSON 数组
【发布时间】:2014-05-15 15:33:58
【问题描述】:

过去我用 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 函数时,我最终会得到一个这样的数组:

data['ClassGroup'][0]['id'] 将等于“123” data['ClassGroup'][1]['id'] 将等于“456” data['Student'][0]['id'] 将等于“11”

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

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

数据['ClassGroup']['123']['classname'] = "Class 1" 数据['ClassGroup']['456']['classname'] = "Class 2" 数据['学生']['11']['last'] = "一个"

我想你明白了。

我这样做对吗?

【问题讨论】:

  • 您的服务器端代码是什么语言?你能改变你得到这个 JSON 的方式吗?我有一个 JSON.NET ArrToObjConverter,您可以将某些数组的对象属性假定为对象属性,并且您的 JSON 将返回如下内容:“ClassGroup”:{“123”:{“classname”:“Class 1”,“isActive” :“真”、“isExpanded”:“假”、“学生”:[11、22、33、44、55]、“isSelected”:[11、22、33、44、55]}、“456”: { "classname": "Class 2", "isActive": "false", (...) } }
  • 我们正在与一家公司合作开展这个项目。我们正在做前端工作,而他们将做银行端(我相信使用 ASP 和 MsSQL)。我们可以随心所欲地制作这个 JSON 数组,而另一家公司将编写一个后端脚本,该脚本将生成一个以这种格式填充数据的文件。

标签: javascript jquery json multidimensional-array


【解决方案1】:

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

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

【讨论】:

  • 两次拥有class id是不是多余?我只是在想,如果类集很大,它可能会减少整体 JSON 大小。
  • 您可以根据需要将其删除。我只是想表明 id 是从它的属性中获取的。
  • 感谢您的回复。出于某种原因,我在键值对中纠缠不清,无法想出使用实际 ID(通常是一个值)作为键的想法。我重新格式化了我的 JSON,一切正常。谢谢!
【解决方案2】:

您可以编写一个函数来消除与迭代有关的所有麻烦:

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

Fiddle

【讨论】:

  • 这是一个非常方便的功能,我肯定会在以后使用它。由于我们可以按照我们喜欢的方式格式化 JSON,我想我会走 Iqbal 建议的路线。这个 Web 应用程序将涉及大量使用 ID 在“表”之间跳转。
猜你喜欢
  • 2023-03-09
  • 1970-01-01
  • 1970-01-01
  • 2023-02-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多