Json
序列化(Serialization):将對象的狀态資訊轉換為可以存儲或可以通過網絡傳輸的過程,傳輸的格式可以是JSON、XML等。我們把變量從記憶體中變成可存儲或傳輸的過程稱之為序列化
反序列化:從存儲區域(JSON,XML)讀取反序列化對象的狀态,重新建立該對象。變量内容從序列化的對象重新讀到記憶體裡稱之為反序列化
json是什麼呢?
是一種輕量級的資料交換格式。
完全獨立于程式設計語言的文本格式來存儲和表示資料。
簡潔和清晰的層次結構使得 JSON 成為理想的資料交換語言。 易于人閱讀和編寫,易于機器解析和生成,并有效地提升網絡傳輸效率。
常用有2個方法,也是最基本的使用方法:
1、dumps:把字典轉成json字元串
2、loads:把json字元串轉成字典
import json
test_dict = {'a':1, 'b':2}
print(type(test_dict))
#把字典轉成json字元串
json_text = json.dumps(test_dict)
print(json_text)
print(type(json_text))
#把json字元串轉成字典
json_dict = json.loads(json_text)
print(json_dict)
print(type(json_dict))
輸出結果為:
<class 'dict'>
{"a": 1, "b": 2}
<class 'str'>
{'a': 1, 'b': 2}
<class 'dict'>
還有有2個方法讀寫json檔案的方法,與上述方法相比都少了s
1、dump:
2、load:
- 把字典轉成json字元串,并儲存到檔案中
import json
import codecs
test_dict = {'a':1, 'b':2}
#把字典轉成json字元串
json_text = json.dumps(test_dict)
#把json字元串儲存到檔案
#因為可能json有unicode編碼,最好用codecs儲存utf-8檔案
with codecs.open('1.json', 'w', 'utf-8') as f:
f.write(json_text)
- 從json檔案中讀取到字典中
import json
import codecs
#從檔案中讀取内容
with codecs.open('1.json', 'r', 'utf-8') as f:
json_text = f.read()
#把字元串轉成字典
json_dict = json.loads(json_text)
上面代碼,我們也可以用load和dump修改。
- dump把字典轉成json字元串并寫入到檔案
import json
import codec
test_dict = {'a':1, 'b':2} #把字典轉成json字元串并寫入到檔案
with codecs.open('1.json', 'w', 'utf-8') as f:
json.dump(test_dict, f)
- load從json檔案讀取json字元串到字典
#coding:utf-8
import json
import codecs
#從json檔案讀取json字元串到字典
with codecs.open('1.json', 'r', 'utf-8') as f:
json_dict = json.load(f)
相關參數
- json.dumps 相關參數:
(1)sort_keys是告訴編碼器按照字典排序(a到z)輸出。
(2)indent參數根據資料格式縮進顯示,讀起來更加清晰
(3)separators參數的作用是去掉,,:後面的空格,從上面的輸出結果都能看到”, :”後面都有個空格,這都是為了美化輸出結果的作用,但是在我們傳輸資料的過程中,越精簡越好,備援的東西全部去掉,因
此就可以加上.
(4)skipkeys參數,在encoding過程中,dict對象的key隻可以是string對象,如果是其他類型,那麼在編碼過程中就會抛出ValueError的異常。skipkeys可以跳過那些非string對象當作key的處理.
(5)輸出真正的中文需要指定ensure_ascii=False
參考:廖雪峰python
http://yshblog.com/blog/104