【问题标题】:Unified data model for JSON, BSON and YAMLJSON、BSON 和 YAML 的统一数据模型
【发布时间】:2024-01-20 03:10:01
【问题描述】:

最初,JSON 是从 JavaScript(对象文字)借用其语法,但后来成为一种与编程语言无关的数据交换格式。它的结构(字符串、数组、对象)可以直接映射到大多数动态编程语言中的原始数据类型,反之亦然。

现在,既然它不再依赖于 JavaScript,那么今天 JSON 的抽象数据模型是什么?换句话说,如果我们将 XML 与 JSON 进行比较,是否存在与 JSON 等效的 XML Infoset?

显然,JSON 并不是唯一可用于序列化类似 JSON 的文档的格式。替代方案包括 YAML、BSON 甚至 XML。是否有该统一数据模型的名称以及可能的正式规范?

【问题讨论】:

  • 在 YAML 中,您可能正在寻找 JSON Schema,它定义了标量的解释,以便建立与 JSON 的兼容性。

标签: json xml yaml bson datamodel


【解决方案1】:

XML 比 JSON 格式更复杂。 XML 具有和 JSON 缺乏的一些共同特性是:命名空间、属性、cmets。但是,这两种格式都可以表示任何类型的数据,但可能具有不同的结构逻辑。

JSON 的抽象数据模型是什么?和创建时一样,没有任何变化。 JSON 用作服务器-客户端通信的数据格式。它从未与 JavaScript 绑定,因为它只是一个格式化的数据字符串,而不是某种二进制可执行文件。它的格式来源于 javascript 是的,但是任何语言都可以用文本解析器来解释它。

我不确定您在寻找什么样的信息,但是将特定语言的结构化数据转换为字符串(反之亦然)的过程的名称称为序列化/反序列化,但您已经知道这些术语...

“统一数据模型”、“正式规范”,你到底在找什么?您在寻找数据格式化的原则吗?数据存储 ?人们需要存储/传输/展示他们的数据,并且他们想出了办法来做到这一点,仅此而已。

【讨论】:

  • 我要找的东西真的很简单。 JSON 基本上只是一种用于编码由字符串、列表、字典等组成的数据的具体语法。 YAML 和 BSON 也是如此。因此,例如,可以定义从 JSON 到 JAML 的直接一对一映射。然后,尽管这两个文档(一个在 JSON 中,另一个在 YAML 中)在语法上会有所不同(例如,它们需要不同的解析器来读取它们),但它们的结构将是相同的,它们将符合相同的数据模型。问题是:这个数据模型是在某处指定的吗?
  • @proskor 这同样不适用于 YAML,您可以在 YAML 中保存(和重新加载)某些结构,如果没有 JSON,则无法使用 JSON 进行保存,需要语义解释原语的程序.递归和自递归结构就是一个很好的例子。从 JSON 到 YAML 存在一对一的映射,因为 YAML (1.2) 解析器可以读取 JSON,但没有从 YAML 到 JSON(或从 XML 到 JSON)的映射。
  • @Anthon 那么 YAML 模型严格来说比 JSON 更具表现力吗?您能否举一个 YAML 文档中递归结构的示例?我不知道这是可能的,但我想学习。
  • @proskor YAML 1.2 实际上是 JSON 的超集。在 YAML 文档中查找锚点和别名。这个answer 有一些例子。
  • 另外,在 YAML 中 any object can be used as a mapping key,而在 JSON 中,只有字符串可以用作键。