【问题标题】:Fundamental JSON-like object structure?基本的类似 JSON 的对象结构?
【发布时间】:2017-06-24 23:31:53
【问题描述】:

如何在类似 JSON 的对象中正确存储数据?从我所见,有两种方法可以将数据存储在 json 对象中。两者都有不同的方式来访问数据(Python 中的示例):

选项 1:

obj1 = [
    {"id": 1, "payload": "a"},
    {"id": 2, "payload": "b"},
    {"id": 3, "payload": "c"},
]

在选项1中访问某个id的payload:

for element in obj1:
    if element["id"] == 2:
        print(element["payload"])

这意味着,必须扫描整个元素列表(可能)以找到正确的 id 并返回其值。

另一方面,还有选项 2:

obj2 = {
    1: "a",
    2: "b",
    3: "c",
}

要访问第二个“id”的payload只需:

print(obj2[2])

我现在的问题是,为什么看到选项 1 更常见,即使它看起来更复杂搜索?我什么时候使用选项 1,什么时候使用选项 2?

【问题讨论】:

  • 取决于用例...
  • 好吧,你有一个对象数组而不是单个对象 - 所以由你来决定哪个对任务是正确的。在扩展性和易读性方面,我认为第一种选择更好。想要添加新属性?你不能用选项二来做到这一点。另外,对于选项 2,您总是可以只使用一个数组,它不一定是一个对象。
  • 还有选项3,它是objects的对象

标签: javascript python json schema


【解决方案1】:

我们应该澄清一些术语。

当您将值列表放入[] 时,您正在创建一个数组;它由数组索引而不是数据的任何元素作为键。

当您将键和值列表放入{} 时,您正在创建一个对象;如您所述,如果您知道相应的键,则可以找到一个值。

两种结构之间存在许多差异。在您站点的特定用例中 - 希望根据其字段值之一查找数据实例 - 使用该字段作为键的对象是有意义的。

但是对象键是无序的。数组更自然地让您迭代其所有元素。

这取决于您要如何处理这些值;这就是为什么不只有一种数据结构的原因。

【讨论】:

  • 好的,那么让我们说,而不是数组,我有对象obj1 = {"data": [] }。现在我有两个对象。我经常将这种类型的对象视为来自 Web 服务的响应。我想我的问题主要是针对 ID 的。为什么 ID 不总是存储为 option2 ?
  • 我看不出它与任何东西有什么关系,无论您是否将数组包装在对象中。人们有时使用数组而不是对象的原因是他们有时需要具有数组而不是对象特征的数据结构。
【解决方案2】:

除了以某种方式演变的技术工件之外,如果元素的顺序很重要,选项一是有意义的。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-08-26
    • 2011-04-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-06-27
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多