【问题标题】:What should "JSON object" be called?“JSON 对象”应该叫什么?
【发布时间】:2011-11-04 22:05:28
【问题描述】:

每当这里有人说“我有一个 JSON 对象”时,人们就会(正确地)抱怨“没有 JSON 对象这样的东西!”但是……

可以用 JSON 表示的数据结构类别是什么?

这有点像“Map、List、Number、String 和 Boolean 的有限传递闭包”——也就是说,省略了函数之类的东西以及集合和队列等更高级的结构。该类别很有用。显然,用 JSON 完成的一切都使用它。 CouchDB(我认为其他面向文档的数据库)使用它。大多数非循环数据结构都包含在其中。

但是它叫什么?

【问题讨论】:

  • json 代表 javascript 对象表示法,因此任何对象都是 json,任何 json 都是对象。但是当您在 javascript 之外时,我们将这种类型的对象称为 json,因为该格式源自 javascript 对象
  • @Ibu “任何对象都是 JSON”,不完全正确,JSON 使用 JS 语法的子集,并不是所有可以用 JS 对象完成的事情都可以用 JSON 表示。例如,JS 对象可以具有作为值(方法)的函数,这些函数不能导出为 JSON。另外 JSON 需要引用对象中的属性名称,JS 不需要,JSON 需要双引号,JS 可以使用双引号或单引号:{validJS: 'but not valid JSON'}。然而,JSON 字符串是有效的 JS:{"validJS": "and also valid JSON"}.
  • 我真的希望 Crockford 先生使用术语“JSON”,因为多年来将“JS”包含在 JavaScript 中导致了无穷无尽的混乱。不确定用什么更好的术语可能是“通用对象表示法”或“对象序列化格式”的“GON”或“OSF”?无论如何,现在为时已晚。
  • 在这个 RFC 中,Crockford 先生称他们为 JSON objects and JSON arrays

标签: javascript nomenclature


【解决方案1】:

也许你可以称它们为“JSON-compatible”或“JSON-serializable”。

【讨论】:

    【解决方案2】:

    有 JSON 对象吗?没有。它不采用它被序列化的对象类型吗? 如上

    如果 JSON 是一种数据交换格式,并且 JSON 格式的结果文件遵循规范,它不会跟踪您有一个项目数组或项目列表,而不是对象吗?

    【讨论】:

      【解决方案3】:

      JSON 只是一种很容易转换为 Javascript 对象的符号。当 JSON 在 Javascript 中具体化(评估)时,它会变成 Javascript 对象/关联数组(取决于表示它的 JSON)。

      我认为可以用 JSON 表示的数据结构类就是:“数据结构”。例如,您可以用 JSON 表示二叉树,甚至可以表示列表和映射;它们本身就是特定的数据结构,它们的总称就是“数据结构”。

      假设 JSON 只能表示一种特定类型的数据结构(例如,只有树),那么我们可以将 JSON 表示的对象类称为“树”。但 JSON 不仅仅如此;它可以表示不同类型的数据结构,这就是为什么最好说“我这里有这个 JSON,它表示某某数据结构”。

      我想如果你真的把它归结为,JSON 表示一个数据结构,它可以是一个序列,也可以是一个包含名称-值对的结构,其中的值可以是原始值(ints、strings、 floats、booleans、nulls、undefineds) 或名称-值对或序列。

      再想一想,询问可以用JSON表示的数据结构类的名称,就像询问可以用XML表示的数据结构类的名称一样。两者都是可以具体化为实际对象的抽象符号。

      TL; DR; 只需将其称为对象,或使用其实际的数据结构名称即可。这就像说“XML 对象”。 XML 表示的结构类没有通用名称。 XML 可以表示一个对象,就像 JSON 可以表示一个对象一样。

      【讨论】:

        【解决方案4】:

        我认为这个问题有点牵强,因为如果您覆盖对象上的序列化,任何对象都可以用 JSON 表示。

        现在,如果您的意思是,哪些对象可以本地表示为 JSON,这取决于您的语言和环境。

        【讨论】:

        • 不是任何对象。由于无法自引用,因此无法在 JSON 中表示任何循环数据结构。
        • @Vivin:您可以表示循环结构,您只需将其转换为非循环结构并有某种约定将其转换回来。
        • @Matthew Crumley -- 完全正确。似乎 JSON 更像是与 Javascript 一起使用的序列化约定,而不是给定数据结构类的基础。
        • @Matthew 你是对的,但我想的是直接翻译,没有转换。 davecoulter 我也是这么想的。它更像是一种符号/表示/约定。所以这是一个抽象的概念。
        • @Vivin:是的,就这个问题而言,我不会考虑循环结构“JSON 兼容”(现在我想起来,这可能是一个很好的答案),我只是我想我会提到这是可能的,因为我最近实际上只是做了类似的事情。
        猜你喜欢
        • 2015-08-08
        • 2013-08-13
        • 2011-01-12
        • 2017-02-22
        • 1970-01-01
        • 1970-01-01
        • 2023-04-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多