JSON的全稱是”JavaScript Object Notation”,意思是JavaScript對象表示法,它是一種基於文本,獨立於語言的輕量級數據交換格式。XML也是一種數據交換格式,為什么沒有選擇XML呢?因為XML雖然可以作為跨平台的數據交換格式,但是在JS(JavaScript的簡寫)中處理XML非常不方便,同時XML標記比數據多,增加了交換產生的流量,而JSON沒有附加的任何標記,在JS中可作為對象處理,所以我們更傾向於選擇JSON來交換數據。這篇文章主要從以下幾個方面來說明JSON。
1,JSON的兩種結構
2,認識JSON字符串
JSON的兩種結構
JSON有兩種表示結構,對象和數組。
對象結構以”{”大括號開始,以”}”大括號結束。中間部分由0或多個以”,”分隔的”key(關鍵字)/value(值)”對構成,關鍵字和值之間以”:”分隔,語法結構如代碼。
{ key1:value1, key2:value2, ... }
其中關鍵字是字符串,而值可以是字符串,數值,true,false,null,對象或數組
數組結構以”[”開始,”]”結束。中間由0或多個以”,”分隔的值列表組成,語法結構如代碼。
[ { key1:value1, key2:value2 }, { key3:value3, key4:value4 } ]
認識JSON字符串
之前我一直有個困惑,分不清普通字符串,json字符串和json對象的區別。經過一番研究終於給弄明白了。比如在js中。
字符串:這個很好解釋,指使用“”雙引號或’’單引號包括的字符。例如:var comStr = 'this is string';
json字符串:指的是符合json格式要求的js字符串。例如:var jsonStr = "{StudentID:'100',Name:'tmac',Hometown:'usa'}";
json對象:指符合json格式要求的js對象。例如:var jsonObj = { StudentID: "100", Name: "tmac", Hometown: "usa" };
注意:我們在寫入文件中的數據,只能是字符串,但是如果要想把內存的數據對象存到硬盤上去怎么辦吶?
總結:如果是從文件中讀數據,就用json.load,因為文件中的數據都是字符串類型,要把字符串轉成json類型;如果是把內存中的東西,寫入到文件中,就需要把json類型轉換成字符串類型,用json.jump
dump()
import json info = { 'name':"zhangqigao", "age":22 } with open("test.txt","w") as f: #文件以寫的方式打開 json.dump(info,f) #第1個參數是內存的數據對象 ,第2個參數是文件句柄 #text.txt文件中的內容 {"name": "zhangqigao", "age": 22}
load()反序列化
import json with open("test.txt","r") as f: #以讀的方式打開文件 data = json.load(f) #輸入文件對象 print(data.get("age")) #輸出 22
json與dict的區別
- Python 的dict是一種數據結構,json 是一種數據傳輸格式
- Python的dict的key可以是任意可hash對象,json只能是字符串。形式上有些相像,但json是純文本的,無法直接操作
- json的格式要求必須且只能使用雙引號作為key或者值的邊界符號,不能使用單引號,但dict就無所謂了。
- python的dict的Key是唯一的,而json的Key可以重復。