首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >对象数组与对象数组

对象数组与对象数组
EN

Stack Overflow用户
提问于 2015-07-17 06:17:00
回答 6查看 21.5K关注 0票数 65

现在的问题是决定下列符号之间的权衡:

基于JSON的

代码语言:javascript
复制
"users": {
    "id1": {
        "id": "id1",
        "firstname": "firstname1",
        "lastname": "lastname1"
    },
    "id2": {
        "id": "id2",
        "firstaame": "firstname2",
        "lastname": "lastname2"
    }
}

基于阵列的

代码语言:javascript
复制
users: [
    {
        "id": "id",
        "key2": "value2",
        "key3": "value3"
    },
    {
        "id": "id",
        "key2": "value2",
        "key3": "value3"
    }
]

关于同一问题上的帖子,我决定(在前端)使用JSON对象表示法,而不是对象数组,因为它适合我的要求,性能更好,浏览器中的代码更少。

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

任何关于性能、可维护性或可伸缩性的想法或建议都将受到重视。

EN

回答 6

Stack Overflow用户

回答已采纳

发布于 2015-07-17 07:15:09

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

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

优势: In JavaScript您可以直接使用users.id1,users.id2,即不需要迭代

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

基于阵列的方法:,如果我没有错,那么这将在服务器端使用Array/List实现。

优势:

  1. 在客户端,您可以直接遍历数组,而不必事先担心数组中存在哪个id --即没有硬编码。
  2. 正如@JBNizet所指出的,基于数组的方法将保持顺序。

缺点:,如果您想获取单个id,那么您将需要遍历数组。

通常,我们不会在客户端发送太多信息,因此基于数组的方法不会造成任何问题。如果您需要基于id的方法,则可以在端(服务器和客户端)将数组转换为map。

票数 23
EN

Stack Overflow用户

发布于 2015-07-17 07:28:43

在服务器端,数组存储为简单列表:ArrayList<Content>,而对象要么存储为映射:HashMap<String, Content>,要么大部分存储为Java。

为了将Java实体与JSON之间进行转换,您可以查看杰克逊项目,它为您完成了所有这些工作。

我不担心这两个变体之间的性能差异。更重要的是要有一个可以理解的语义API,因此您应该基于业务案例而不是性能。

看看您的例子,我认为Array是更好的方法,因为您希望返回一个用户列表,这些用户都是相等的。发送两次id是没有意义的,因为它增加了必须传输的数据量。

此外,由于Arrays在Java中存储和迭代要简单得多,它们还应该提供比对象更好的性能。

的一些一般区别:

  • 数组保持顺序
  • 数组可以包含重复的条目。
  • 对象通常具有较大的存储/网络开销。
  • 数组迭代速度更快(在服务器端)
票数 7
EN

Stack Overflow用户

发布于 2018-11-08 22:08:21

除了上述技术上的差异,我认为在对象和数组的目的和意义上存在着根本的差异。

  1. 对象的属性( DESCRIBE/DEFINE )
  2. 数组的元素并不是描述/定义数组的,相反,数组定义了它的内容。请注意-我不是在谈论技术方面。技术上可以有任何组合,但语义上每个组合都有其目的。
代码语言:javascript
复制
- For example a card holder. Each card does **NOT DESCRIBE/DEFINE** the card-holder. But the card holder does define it's purpose that it holds only cards/
- An Object is used to represent an entity and its properties **DESCRIBE/DEFINE** the entity. Take the same example of a Card. A card has properties like color, number which **DESCRIBE/DEFINE** what the card is. 

对于上面的例子:

  1. 每个表示person 的对象都由属性 id、firstName和lastName定义。
  2. 这些人的列表不能是对象的对象,因为每个id都没有描述对象的对象。所以 “用户”:{ "id":"id","key2":"value2","key3":"value3“},{ "id":"id","key2":"value2","key3":"value3”}

是一个比

代码语言:javascript
复制
"users": {
    "id1": {
        "id": "id1",
        "firstname": "firstname1",
        "lastname": "lastname1"
    },
    "id2": {
        "id": "id2",
        "firstaame": "firstname2",
        "lastname": "lastname2"
    }
}

尽管技术上你可以用任何一个。我希望我能以正确的方式表达我的思想。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/31469441

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档