1. 程式人生 > >python3 json模組

python3 json模組

1. json模組介紹

json是python自帶的操作json的模組。

python序列化為json時的資料型別轉換關係:

python格式 json格式
dict(複合型別) object
list, tuple(集合型別) array
int, long, float(數值型別) number
str, unicode string
True true
False false
None null

json反序列化為python資料型別對照關係:

json格式 python格式
object dict
array list
string unicode
number(int) int, long
numer(real) float
true True
false False
null None

2. 如何使用

json庫提供了幾個API:

json.dumps(): 將字典序列化為json字串

json.loads(): 將json字串反序列化為字典

json.dump(): 將字典序列化到一個檔案,是文字檔案,就是相當於將序列化後的json字串寫入到一個檔案

json.load(): 從檔案中反序列出字典

總結: 不帶s的是序列到檔案或者從檔案中反序列化,帶s的是都在記憶體中操作不涉及到持久化

一個簡單使用的例子如下:

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

#! /usr/bin/python

import

json

if __name__ == '__main__':

cc = {

"name""CC11001100",

"age"22,

"money"9.9,

"car""Feng-Huang Bicycle",

"house""祖宅",

"girl friend"None,

"hobby""thinking..."

}

# 序列化為字串

json_string = json.dumps(cc)

print(json_string)

# 從字串中反序列化

json_dict = json.loads(json_string)

print(json_dict)

# 序列化到檔案中

with open('D:/cc.json''w') as json_file:

json.dump(cc, json_file)

# 從檔案中反序列化

with open('D:/cc.json''r') as json_file:

json_dict = json.load(json_file)

print(json_dict)

py物件序列化為json的時候會接受的幾個引數:

indent: 即縮排量是幾個空格,當需要格式化輸出的時候一般設為4個空格

一個指定indent的小例子:

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

#! /usr/bin/python

import json

if __name__ == '__main__':

cc = {

"name": "CC11001100",

"age": 22,

"money": 9.9,

"car": "Feng-Huang Bicycle",

"house": "祖宅",

"girl friend": None,

"hobby": "thinking..."

}

print(json.dumps(cc, indent=4))

輸出:

1

2

3

4

5

6

7

8

9

{

"name""CC11001100",

"age": 22,

"money": 9.9,

"car""Feng-Huang Bicycle",

"house""\u7956\u5b85",

"girl friend"null,

"hobby""thinking..."

}

separators: 生成的json子串所使用的分隔符,就是用來代替分隔多個k/v對的,和分隔k/v的:

一個指定了separators的小例子:

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

#! /usr/bin/python

import json

if __name__ == '__main__':

cc = {

"name""CC11001100",

"age"22,

"money"9.9,

"car""Feng-Huang Bicycle",

"house""祖宅",

"girl friend"None,

"hobby""thinking..."

}

print(json.dumps(cc, indent=4, separators=('↓''→')))

輸出:

1

2

3

4

5

6

7

8

9

{

"name""CC11001100"

"age"→22↓

"money"→9.9↓

"car""Feng-Huang Bicycle"

"house""\u7956\u5b85"

"girl friend"null

"hobby""thinking..."

}

sort_keys:是否對key進行排序,目前還沒感覺出有啥用

3. 自帶json模組的侷限性

使用自帶的json模組雖然很方便,但是序列化自定義型別的時候就會丟擲一個TypeError的異常:

1

TypeError: Object of type 'Person' is not JSON serializable

對於自定義型別的序列化,一般都是使用第三方庫,當然這個是另外的內容了。

參考資料: