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