我可以获得更多关于BSON的解释吗?

时间:2013-04-23 12:53:41

标签: json bson

我试图通过http://bsonspec.org/#/specification了解BSON,但仍然存在一些问题。


让我们从上面的网站上做一个例子:

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

问题1

在上面的例子中,对于编码的字节结果,双引号实际上不是结果的一部分,对吗?

问题2

我了解the first 4 bytes \x16\x00\x00\x00是整个BSON文档的大小。

它是little endian格式。但为什么?为什么不采取big endian

问题3

示例文档的大小如何变为\x16,即22

问题4

通常情况下,如果我想自己编码doc,我该如何计算doc的大小?我认为我的麻烦主要是如何决定UTF-8字符串的大小?


让我们再看一个例子:

{"BSON": ["awesome", 5.05, 1986]}   

→   

"\x31\x00\x00\x00\x04BSON\x00\x26\x00\x00\x00\x020\x00\x08\x00\x00 
 \x00awesome\x00\x011\x00\x33\x33\x33\x33\x33\x33\x14\x40\x102\x00\xc2\x07\x00\x00 
 \x00\x00"

问题5

在此示例中,有一个数组。根据规范,对于数组,它实际上是{key, value}对的列表,而密钥是01等。我的问题是01这里也是字符串,对吧?

1 个答案:

答案 0 :(得分:2)

  

问题1

     

在上面的例子中,对于编码的字节结果,双引号实际上不是结果的一部分,对吗?

引号不是字符串的一部分。它们用于标记JSON字符串

  

问题2

     

它是小端格式。但为什么?为什么不采取大端?

字节序的选择在很大程度上取决于偏好。 little endian的一个优点是常用的平台是小端,因此不需要反转字节。

  

问题3

     

示例文档的大小如何为\ x16,即22?

有22个字节(包括长度前缀)

  

问题4

     

通常情况下,如果我想自己编码doc,我该如何计算doc的大小?我认为我的麻烦主要是如何决定UTF-8字符串的大小?

首先写出文件,然后回去填写长度。

  

问题5

     

在这个例子中,有一个数组。根据规范,对于数组,它实际上是一个{key,value}对的列表,而键是0,1,等等。我的问题是0,1这里也是字符串,对吗?

是。没有长度前缀的零终止字符串是准确的。 (在列表中调用cstring)。就像嵌入式文档一样。