天天看點

「python」Json

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