Python json
JSON表示出来是一串字符串,可以被所有语言读取,也可以方便存储和传输
JSON表示的对象就是JavaScript语言的对象
JSON和Python 数据类型对应
JSON类型 | Python类型 |
---|---|
{} | dict |
[] | list |
"string" | str |
1234.56 | int或float |
true/false | True/False |
null | None |
把Python对象变成JSON字符串:json.dumps()
d = dict(name='sandy', age=20, score=18)
print(json.dumps(d))
==》{"name": "sandy", "age": 20, "score": 18}
把Python对象编程JSON字符串,并写入到文件: json.dump()
path = 'D:\\test.txt'
with open(path, 'w') as f:
json.dump(d, f)
Python的dict对象可以直接序列化为JSON对象,但是如果是class对象, 不能直接序列化成JSON字符串,需要一些转换:
可以写一个函数来实现,返回值是JSON的字符串,如:
def stu2dict(std):
return{
'name': std.name,
'age': std.age,
'score': std.score
}
也可以调用class的dict属性:
json.dumps(s, default=lambda obj: obj.__dict__) # s是实例化的对象
class Student(object):
def __init__(self, name, age, score):
self.name = name
self.age = age
self.score = score
def stu2dict(std):
return{
'name': std.name,
'age': std.age,
'score': std.score
}
s = Student('sandy', 12, 80)
print(json.dumps(s, default=stu2dict)) # {"name": "sandy", "age": 12, "score": 80}
print(json.dumps(s, default=lambda obj: obj.__dict__)) # {"name": "sandy", "age": 12, "score": 80}
对中文进行序列化的时候,参数 ensure_ascii=False
print(json.dumps('中国', ensure_ascii=True)) # 输出"\u4e2d\u56fd"
print(json.dumps('中国', ensure_ascii=False)) # 输出"中国"