066 json模塊

Json

  • 用python寫了一個程序,用java寫了一門程序,這兩個程序須要數據之間交流,規定了一種多種語言通用的數據類型,json串

1. 序列化

把對象(變量)從內存中變成可存儲或傳輸的過程稱之爲序列化java

序列化的優勢:python

  1. 持久保存狀態:內存是沒法永久保存數據的,當程序運行了一段時間,咱們斷電或者重啓程序,內存中關於這個程序的以前一段時間的數據(有結構)都被清空了。可是在斷電或重啓程序以前將程序當前內存中全部的數據都保存下來(保存到文件中),以便於下次程序執行可以從文件中載入以前的數據,而後繼續執行,這就是序列化。
  2. 跨平臺數據交互:序列化時不只能夠把序列化後的內容寫入磁盤,還能夠經過網絡傳輸到別的機器上,若是收發的雙方約定好實用一種序列化的格式,那麼便打破了平臺/語言差別化帶來的限制,實現了跨平臺數據交互。

2.json序列化

Json序列化並非python獨有的,json序列化在java等語言中也會涉及到,所以使用json序列化可以達到跨平臺傳輸數據的目的。json

  • json數據類型和python數據類型對應關係表網絡

    Json類型 Python類型
    {} dict
    [] list
    "string" str
    520.13 int或float
    true/false True/False
    null None
  • json模塊序列化和反序列化的一個過程以下圖所示code

    json模塊

3.序列化 反序列化舉例

  • 拿字典舉例
# 序列化:從python的字典(最經常使用)變成json串, dump
# 反序列化:從json串變成python的字典(最經常使用),load

import json

dic = {'a': 1, 'b': 'abc', 'c': None}

data = json.dumps(dic)  # 序列化到內存中
print(data,type(data))  # 單引號所有變成雙引號
# {"a": 1, "b": "abc", "c": null} <class 'str'>

data = json.loads(data)  # 從內存中獲取json串
print(data,type(data))# 雙引號全都變成了單引號
# {'a': 1, 'b': 'abc', 'c': None} <class 'dict'>

with open('test.json','w',encoding='utf8') as fw:# 還能夠直接序列化寫在文件裏
    json.dump(dic,fw)

with open(f'{"test"}.json','r',encoding='utf8') as fr: # 直接從文件裏取,進行反序列
    data = json.load(fr)
    print(data)
    # {'a': 1, 'b': 'abc', 'c': None}
相關文章
相關標籤/搜索