所以BSON是JSON序列化的吗?
{"hello": "world"}
→"\x16\x00\x00\x00\x02hello\x00 \x06\x00\x00\x00world\x00\x00"
但为什么叫Binary Json?二元代表什么?
我总是倾向于将二进制文件与10101010101相关联。但上面的BSON序列化格式不是101010101010格式。
有人可以解释一下Binary在这里意味着什么,所以我理解为什么它被称为Binary JSON?
答案 0 :(得分:20)
它是二进制而不是文本。 JSON是人类可读的文本,而BSON是二进制数据(只是字节)。你可以将其写为1001010等,但是一次显示每个字节更常见(因此\ x16只是十六进制16,即十进制字节22)。这里基本上使用“二进制”来将其与文本数据进行比较,而不是说它实际上是基数2。
这意味着您只能在可以传输任意二进制数据的情况下使用BSON。例如,如果您想在一个XML文档中嵌入BSON(无论出于何种原因!),您必须首先对其进行base64编码,因为XML是基于文本的表示。
答案 1 :(得分:4)
二进制实际上是一个误称,因为你的计算机上的所有东西都是某种程度上的“二进制”。二进制文件,当涉及文件或网络流格式时,意味着不容易理解。它也趋于紧凑。
文本或“人类可读”(人类可理解的)文件和流格式的示例:
“二进制”文件和流格式的示例:
这里最值得注意的是,如果你只是将它们打开并开始阅读,那么人类可理解的格式需要的解释要少得多。二进制文件格式可能需要整本书来解释:)
格式不一定纯粹是“二元”或纯粹是人类可理解的。例如,您可能理解一系列没有空格的单位数字,它们代表一位数字的数字。您可能无法理解一系列48个数字(没有空格),它们代表16个3d顶点的x,y和z值,即使您可以“读取”它们。此外,还有Skeet编码的“二进制”数据示例,特别是如果它以更易于理解的格式嵌入。
答案 2 :(得分:1)
它被称为'二进制'的原因已经解释了:基本上,它不是文本的,因此是unix风格的区别(二进制文本文件)。
但是JSON部分也很奇怪,因为BSON不是JSON - 它既不是子集也不是超集。它有更多的数据类型,所以它有点超集;但由于属性名称和字符串值长度限制等限制,它也不支持所有合法的JSON。