一尘不染

对象数组与对象对象

json

问题在于确定以下符号之间的权衡:

基于JSON

"users": {
    "id1": {
        "id": "id1",
        "firstname": "firstname1",
        "lastname": "lastname1"
    },
    "id2": {
        "id": "id2",
        "firstaame": "firstname2",
        "lastname": "lastname2"
    }
}

基于数组

users: [
    {
        "id": "id",
        "key2": "value2",
        "key3": "value3"
    },
    {
        "id": "id",
        "key2": "value2",
        "key3": "value3"
    }
]

关于同一问题的这篇文章,我已经决定(在前端)使用JSON对象表示法而不是对象数组,因为它符合我的要求,更好的性能和更少的浏览器代码。

但是问题在于列表本身不是静态的。我的意思是,该列表正在生成,即从DB(NoSQL)获取/存储,并通过服务器上的JavaAPI为新条目创建。我无法决定在后端应使用哪种表示法(最终也会影响UI)。

关于性能,可维护性或可伸缩性的任何想法/建议均应受到赞赏。


阅读 184

收藏
2020-07-27

共1个答案

一尘不染

这是一个完全基于意见的问题。可能还有许多其他要点,但我可以指出如下。

基于JSON的方法: 如果我没有记错,那么这将Map在服务器端使用来实现。

优点: 在JavaScript中,您可以直接使用users.id1,users.id2,即无需迭代

缺点: 在客户端,您将需要一些如何使用JSON中存在的ID的方法,即硬编码它或使用某种动态方法来告诉您JSON中存在哪些ID。


基于数组的方法: 如果我没有记错的话,这将在服务器端使用Array/ 来实现List

优点:

  1. 在客户端,您可以直接遍历数组,而无需事先担心其中存在哪个ID,即无需进行硬编码。
  2. 正如 @JBNizet 指出的 那样 ,基于数组的方法将保持顺序。

缺点: 如果要获取单个id,则需要遍历数组。

通常,我们不会在客户端发送太多信息,因此基于数组的方法不会造成任何问题。和 转化数组地图有可能在两侧(服务器和客户端) ,如果你想基于ID的方法。

2020-07-27