9

那么BSON是JSON序列化的吗?

{"hello": "world"}"\x16\x00\x00\x00\x02hello\x00 \x06\x00\x00\x00world\x00\x00"

但是为什么叫Binary Json呢?二进制代表什么?

我总是倾向于将二进制与 10101010101 联系起来。但是上面的 BSON 序列化格式不是 101010101010 的形式。

有人可以为我解释一下这里的二进制是什么意思,这样我就明白为什么它被称为二进制 JSON 了吗?

4

3 回答 3

20

它是二进制而不是文本。JSON 是人类可读的文本,而 BSON 是二进制数据(只是字节)。您可以将其写为 1001010 等,但更常见的是一次显示每个字节(因此 \x16 只是十六进制 16,即十进制字节 22)。基本上这里的“二进制”用于将其与文本数据进行比较,并不是说它实际上是特别是基数 2。

这意味着您只能在可以传输任意二进制数据的情况下使用 BSON。例如,如果您想将 BSON 嵌入 XML 文档(无论出于何种原因!),您必须首先对其进行 base64 编码,因为 XML 是基于文本的表示。

于 2010-08-24T07:36:26.443 回答
4

二进制确实是用词不当,因为您计算机上的所有内容在某种程度上都是“二进制”的。二进制,当涉及到文件或网络流格式时,意味着不容易被人类理解。它也趋于紧凑。

文本或“人类可读”(人类可理解)文件和流格式的示例:

“二进制”文件和流格式的示例:

这里最值得注意的是,如果您只是将它们打开并开始阅读,那么人类可以理解的格式需要的解释要少得多。二进制文件格式可能需要整本书来解释:)

不过,格式不一定是纯粹的“二进制”或纯粹是人类可以理解的。例如,您可能会理解一系列不带空格的个位数字,它们表示一个个位数字的数组。您可能无法理解一系列 48 个数字(没有空格),它们表示 16 个 3d 顶点的 x、y 和 z 值,即使您可以“阅读”它们。此外,还有 Skeet 的编码“二进制”数据示例,特别是如果它嵌入在更易于人类理解的格式中。

于 2010-08-24T08:08:24.397 回答
1

已经解释了它被称为“二进制”的原因:基本上,它不是文本的,因此是 unix 风格的区别(二进制文件与文本文件)。

但是 JSON 部分也很奇怪,因为 BSON 不是 JSON——它既不是子集也不是超集。它有更多的数据类型,所以它是一种超集;但由于属性名称和字符串值长度限制等限制,它也不支持所有合法的 JSON。

于 2011-01-11T06:58:45.913 回答