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一定也可以。