淺談JSON和BSON


JSON (JavaScript Object Notation)JavaScript對象表示法,是一種輕量級的數據交換格式。
JSON 是存儲和交換文本信息的語法,類似 XML。比 XML 更小、更快,更易解析。
感覺JSON源於互聯網,針對互聯網信息的表示、存儲,非常方便。並由此產生了BSON,BSON是一種類json的一種二進制形式的存儲格式,
簡稱Binary JSON,它和JSON一樣,支持內嵌的文檔對象和數組對象,但是BSON有JSON沒有的一些數據類型,如Date和BinData類型。
BSON有三個特點:輕量性、可遍歷性、高效性。
以上的解釋都有些枯燥,更直白地說,用JSON的鍵值對表示html/JS這些互聯網的數據非常方便。比如python中的字典、列表:
 1 import json
 2 data_dict = {
 3     'id': 1,
 4     'name': 'Runoob',
 5     'url': 'http://www.runoob.com'
 6 }
 7 data_list = [1,2,3,4,5]
 8 json_str_dict = json.dumps(data_dict)
 9 json_str_list = json.dumps(data_list)
10 print(type(json_str_dict),json_str_dict,repr(json_str_dict))
11 #>>><class 'str'> 
12 {"id": 1, "name": "Runoob", "url": "http://www.runoob.com"} 
13 '{"id": 1, "name": "Runoob", "url": "http://www.runoob.com"}'
14 print(type(json_str_list),json_str_list,repr(json_str_list))
15 #>>><class 'str'> 
16 [1, 2, 3, 4, 5] 
17 '[1, 2, 3, 4, 5]'
View Code

 

通過以上輸出來看,python字典數據、列表數據經過json轉換后,變為json的str字符串類型。
而json數據再轉回python數據也是很方便的:
 1 python_dict=json.loads(json_str_dict)
 2 python_list=json.loads(json_str_list)
 3 print(type(python_dict),python_dict,repr(python_dict))
 4 #>>><class 'dict'> 
 5 {'id': 1, 'name': 'Runoob', 'url': 'http://www.runoob.com'} 
 6 {'id': 1, 'name': 'Runoob', 'url': 'http://www.runoob.com'}
 7 print(type(python_list),python_list,repr(python_list))
 8 #>>><class 'list'> 
 9 [1, 2, 3, 4, 5] 
10 [1, 2, 3, 4, 5]
View Code

 

不知道是python成就了json,還是json成就了python。感覺二者之間的聯系,不能更密切了吧?比如你可以定義一些json格式的文件,為python程序提供輸入或者配置。
而python程序的一些輸出結果,也可以用JSON文件存儲。python讀取、寫入JSON文件的程序在這里先不進行,其實也很容易。
再談BSON,后來的MongoDB數據庫專門來存儲、管理BSON數據。而BSON又是JSON的二進制格式,那么是否可以認為MongoDB就是從文件管理到數據庫管理的一個升級?
或者說,當存在大量的JSON文件的時候,如何管理如何查詢如何修改,畢竟這方面是文件的一個劣勢,而數據庫就應運而生呢?
bson_byte_dict=bson.encode(data_dict)
print(type(bson_byte_dict),bson_byte_dict,repr(bson_byte_dict))
#>>><class 'bytes'>
b'=\x00\x00\x00\x10id\x00\x01\x00\x00\x00\x02name\x00\x07\x00\x00\x00Runoob\x00\x02url\x00\x16\x00\x00\x00http://www.runoob.com\x00\x00'
b'=\x00\x00\x00\x10id\x00\x01\x00\x00\x00\x02name\x00\x07\x00\x00\x00Runoob\x00\x02url\x00\x16\x00\x00\x00http://www.runoob.com\x00\x00'
從上面可以看出,bson通過encode函數處理python的dict數據,變為二進制bytes類型。而且,也很容易再轉換回來:
python_dict = bson.decode(bson_byte_dict)
print(type(python_dict), python_dict, repr(python_dict))
#>>><class 'dict'>
{'id': 1, 'name': 'Runoob', 'url': 'http://www.runoob.com'}
{'id': 1, 'name': 'Runoob', 'url': 'http://www.runoob.com'}
總結上述,JSON、BSON、MongoDB相比於之前的傳統關系型數據庫,在存儲互聯網數據方面有很大的優勢。而且對於大數據分布式平台來說,Nosql的數據庫更方便做分布式處理。當然也
可以不用python語言作為中間的紐帶,java一定也可以。



免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM