1. 程式人生 > 實用技巧 >Python標準庫-Json模組(轉載)

Python標準庫-Json模組(轉載)

JSON(JavaScript Object Notation) 是一種輕量級的資料交換格式,Python的Json模組有序列化與反序列化兩個過程。即encodingdecoding。

  • encoding:把一個python物件編碼轉換成Json字串。

  • decoding:把json格式字串編碼轉換成python物件。

什麼是序列化、反序列化?

我們把物件(變數)從記憶體中變成可儲存或傳輸的過程稱之為序列化,在Python中叫pickling,在其他語言中也被稱之為serialization,marshalling,flattening等等,都是一個意思。

即把python中的物件變成可儲存的json字串。序列化之後,就可以把序列化後的內容寫入磁碟,或者通過網路傳輸到別的機器上。

反過來,把變數內容從序列化的物件重新讀到記憶體裡稱之為反序列化,即unpickling。

Json模組提供了四個功能:dumps、dump、loads、load

JSON表示的物件就是標準的JavaScript語言的物件,JSON和Python內建的資料型別對應如下:

json的4個方法

json提供四個功能:dumps, dump, loads, load

1、dumps和dump

序列化過程

將一個python物件編碼轉換成Json字串,可以儲存可以網路遠端傳輸

dumps只完成了序列化為str,將資料通過特殊的形式轉換為所有程式語言都認識的字串

dump必須傳檔案描述符,將序列化的str儲存到檔案中

,將資料通過特殊的形式轉換為所有程式語言都認識的字串,並寫入檔案

import json

dic = {"k1":"v1"}
str1 ="HelloPython"

data1 = json.dumps(dic)
data2 = json.dumps(str1)

print (data1),type(data1)
print (data2), type(data2)

with open("test.json","w+") as f:
  json.dump(dic,f)

輸出結果:

{"k1":"v1"}  <class 'str'>
"HelloPython"   <class 'str'>


生成一個test.json的檔案,內容:
{"k1":"v1"}

2、loads 和 load

​ loads 只完成了反序列化,將json編碼的字串再轉換為python的資料結構

​ load 只接收檔案描述符,完成了讀取檔案和反序列化,資料檔案中讀取資料,並將json編碼的字串轉換為python的資料結構

1 import json
2 
3 
4 with open("test.json") as f:
5       data = json.load(f)
6       #data = json.loads(f.read())  
7 
8 print (data)
9 print (type(data))

輸出結果:

{"k1":"v1"}  <class 'dict'>