Python中内置了json库,用起来超级方便,json现在以成为开发的必备。
python对象到json字符串的转换规则:
Python | JSON |
---|---|
dict | object |
list, tuple | array |
str, unicode | string |
int, long, float | number |
True | true |
False | false |
None | null |
json字符串到python对象的转换规则:
JSON | Python |
---|---|
object | dict |
array | list |
string | unicode |
number (int) | int, long |
number (real) | float |
true True | |
false | False |
null | None |
json的api有下面4个:
- json.loads() 将json转换为dict
- json.dumps() 将dict转换为json
- json.load() 将json文件转换为dict
- json.dump() 将dict转换为json文件 person.json
注意:dict也可以是类对象
dict转换为json
1
2
3
4
5
6
7
8
9
10
11
12
13
14
|
import json person = { 'name' : 'jack' , 'age' : 15 , 'email' : 'jack@litets.com' } print ( 'dict:' , person) person_json = json.dumps(person) # 转换为json print ( 'json:' , person_json) |
输出:
dict: {'name': 'jack', 'age': 15, 'email': 'jack@litets.com'}
json: {"name": "jack", "age": 15, "email": "jack@litets.com"}
json转换为dict
1
2
3
4
|
import json person_dict = json.loads( '{"name": "jack", "age": 15, "email": "jack@litets.com"}' ) print ( 'person dict:' , person_dict) |
输出:
person dict: {'name': 'jack', 'age': 15, 'email': 'jack@litets.com'}
类对象转换为json
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
|
import json class Person: def __init__( self , name, age, email): self .name = name self .age = age self .email = email person = Person( 'tom' , 38 , 'tom@litets.com' ) person_json = json.dumps(person.__dict__) print ( 'person json:' , person_json) |
输出:
person json: {"name": "tom", "age": 38, "email": "tom@litets.com"}
json.dumps() 不能直接传递一个对象实例否则回报 TypeError: Object of type Person is not JSON serializable 错误 为了避免这个错误,我们需要修改:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
|
import json class Person: def __init__( self , name, age, email): self .name = name self .age = age self .email = email # 将person转换为dict def convert2json(person): return { 'name' : person.name, 'age' : person.age, 'email' : person.email } person = Person( 'tom' , 38 , 'tom@litets.com' ) # 第二个参数传递转换函数,或者使用default=lambda o: o.__dict__ person_json = json.dumps(person, default = convert2json) print ( 'person json:' , person_json) |
json转换为类对象
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
|
import json class Person: def __init__( self , name, age, email): self .name = name self .age = age self .email = email def convert2json(dict_json): return Person(dict_json[ 'name' ], dict_json[ 'age' ], dict_json[ 'email' ]) person = json.loads( '{"name": "tom", "age": 38, "email": "tom@litets.com"}' , object_hook = convert2json) print ( 'person:' , person) |
输出:
person: <__main__.Person object at 0x10a7230b8>
loads函数只能将json转换为字典,需要我们自己转换为对象。
dict/对象转换为json文件
1
2
3
4
5
|
import person = { "name" : "tom" , "age" : 38 , "email" : "tom@litets.com" } with open ( 'person.json' , 'w' ) as f: json.dump(person, f) |
当前目录下会多一个person.json文件,内容是:
{"name": "tom", "age": 38, "email": "tom@litets.com"}
将json文件转换为dict/对象
1
2
3
|
import json with open ( 'person.json' , 'r' ) as f: print (json.load(f)) |
输出:
{'name': 'tom', 'age': 38, 'email': 'tom@litets.com'}
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持服务器之家。
原文链接:http://litets.com/article/2019/4/24/374.html