BSON結構,json
BSON結構
flyfish 2015-7-24
主要解釋bsonspec.org網站上的兩個例子
{"hello": "world"}
hello為key,world為value 對應的是
\x16\x00\x00\x00
\x02
hello\x00
\x06\x00\x00\x00world\x00
\x00
解釋每一行的意思
\x16\x00\x00\x00
\x表示16進位的方式
4個位元組表示文檔的大小,包括文檔末尾的'\0','\0'是\x00 0x16十進位是22,這個文檔的大小是22個位元組
採用小端(Little Endian) 原文:Each type must be serialized in little-endian format.
每一種類型必須按照little-endian格式序列化。
\x02
一個位元組表示value的類型,通過查看bsonspec 文檔
原文:"\x02" e_name string UTF-8
\x02 表示value的類型是string,字串編碼使用的是UTF-8
hello\x00
表示以'\0'結尾的字串
\x06\x00\x00\x00world\x00
\\x06\x00\x00\x00 前4個位元組表示以'\0'結尾的字串world的長度
\x00
結束符
二
{"BSON": ["awesome", 5.05, 1986]}
原文:the array ['red', 'blue'] would be encoded as the document {'0': 'red', '1': 'blue'}. The keys must be in ascending numerical order.
數組['red', 'blue']將要編碼為{'0': 'red', '1': 'blue'},key必須按照數值大小遞增排序(升序)。
也就是["awesome", 5.05, 1986]將被編碼為{ "0":"awesome", "1":5.05,"2":1986}
{"BSON": [ "0":"awesome", "1":5.05,"2":1986]}
對應是
\x31\x00\x00\x00
\x04BSON\x00
\x26\x00\x00\x00
\x02\x30\x00\x08\x00\x00\x00awesome\x00
\x01\x31\x00\x33\x33\x33\x33\x33\x33\x14\x40
\x10\x32\x00\xc2\x07\x00\x00
\x00
\x00
解釋每一行的意思
\x31\x00\x00\x00
4個位元組表示文檔的大小,x31的10進位是49,這個文檔的大小是49個位元組
\x04BSON\x00
原文:"\x04" e_name document Array
\x04表示value的類型是數組表示的document
BSON\x00 表示以'\0'結尾的字串
\x26\x00\x00\x00
4個位元組表示數組的大小即中括弧的內容,x26的10進位是38
\x02\x30\x00\x08\x00\x00\x00awesome\x00
\x02 表示value的類型是string
x30表示key,字元0的ASCII碼是48,16進位是x30
縱向看正好是x30,x31,x32
\x08\x00\x00\x00 4個位元組表示awesome\x00 長度
\x01\x31\x00\x33\x33\x33\x33\x33\x33\x14\x40
\x01
原文\x01" e_name double 64-bit binary floating point
表示64位的二進位浮點數
x31\x00表示以'\0'結尾的字串1,字元1的ASCII碼是x31
x33\x33\x33\x33\x33\x33\x14\x40
double的5.5轉換成16進位為40 14 33 33 33 33 33 33
\x10\x32\x00\xc2\x07\x00\x00
原文:"\x10" e_name int32 32-bit integer
\x10表示32位的整數
\x32\x00表示以'\0'結尾的字串2,字元2的ASCII碼是x32
\xc2\x07\x00\x00
也就是16進位的7c2轉換成10進位是1986
\x00
\x00
結束符
著作權聲明:本文為博主原創文章,未經博主允許不得轉載。