javascript - JSON:最好使用一个对象(键/值对),还是两个对象来将数据与模型分开?

标签 javascript json data-structures data-modeling

我没有实现太多 JSON,所以我很好奇是否有处理数据的建议方法。我猜想有两种主要方法(也许它们是无效的 JSON),但我想看看是否有任何额外的优点/缺点,或者更好的方法?


方法 1:键/值对的组合

var all_in_one = { "person"  : [{
                                  "firstName" : "John",
                                  "lastName"  : "Smith",
                                  "phone"     : [{ 
                                                   "areaCode"  : "800", 
                                                   "number"    : "222-3333" 
                                                 },
                                                 {
                                                   "areaCode"  : "800",
                                                   "number"    : "222-3334",
                                                   "extension" : "1111"
                                                 }]
                                },
                                {
                                  "firstName" : "John",
                                  "lastName"  : "Rolfe"
                                },
                                {...}],
                   "other"    : [{...}]
                 };

好处:

  • 键接近值(在循环和拉取值时更直观和更清晰的代码)
  • 不需要值/键(流体模型/结构)

问题:

  • 多条记录的开销更大(键重复)

方法 2:键值分离

var json = { "model" : { "person" : ["firstName","lastName",["areaCode","number","extension"]],
                         "other"  : [...]
                       },
             "data"  : { "person" : [["John","Smith",[["800","222-3333",undefined],
                                                      ["800","222-3334","1111"]]],
                                     ["John","Rolfe",[[undefined,undefined,undefined]],
                                     [...]
                                    ],
                         "other"  : [...]
                       }
            };

好处:

  • 更少的开销(键定义一次)
  • 可以在一处更改的静态模型/结构

问题:

  • 如果预期会发生变化,静态模型/结构可能会出现更多问题
  • 提取数据时代码可能会比较困惑

最佳答案

我从未见过有人使用方法 2。它没有将“数据与模型”分开;无论如何,这没有意义,因为数据模型。您所做的只是让您很难分辨任何数据是什么

我想现在您可以在一个地方重命名一个字段,但这一定是最不常见的架构更改类型之一。添加一个字段、移动一个字段、删除一个字段、交换两个字段、使一个字段成为可选字段等等都将是一场无法验证的噩梦。

(至于开销,gzip 将在线处理它,并且您的 JSON 解码器和/或语言希望足够聪明,可以为每个重复的键重用相同的字符串对象。)

关于javascript - JSON:最好使用一个对象(键/值对),还是两个对象来将数据与模型分开?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14433112/

相关文章:

javascript - 通过 React.js 中的 API 调用返回名称

algorithm - 当给定机器容量时,将给定重量的箱子从一个位置移动到另一个位置的最短时间

javascript - 使用 NaN 作为函数结果而不是必要的整数的问题

Javascript 解析 innerhtml

java - 如何解析 JSON 并将其值转换为数组?

haskell - 镜头的用途/用途是什么?

arrays - 有效地合并相邻 block

javascript - 三个不同高度的div同时到达底部

javascript - 如何使用ng-model获取动态字段

java - 如何为play框架添加依赖项gson