json.dumps (&json.loads): 是对数据的操作; json.dump (&json.load): 也是类似的功能,只是与文件操作结合起来了。
1. json.dumps (&json.loads)
首先json是一种常用的数据格式,它其实也是一种字符串,默认编码是Unicode。 json.dumps: 是将dict转化成 str json.loads: 是将str转化成 dict 值得注意的是再次load回来时,key从int变成了str。 同时在json.dumps时,有一些数据类型是不能被序列化的,例如:set,datatime等。解决方式两种: 1、遇到时转换;
json.dumps(data, default=lambda obj: list(obj) if isinstance(obj, set) else obj)
2、自定义序列化。
import json
from datetime import datetime,date
class CustomerJson(json.JSONEncoder):
def default(self, o):
if isinstance(o,datetime):
return o.strftime('%Y-%m-%d %X')
elif isinstance(o,date):
return o.strftime('%Y-%m-%d')
else:
super().default(self,o)
res = {'c1':datetime.today(),'c2':date.today()}
print(json.dumps(res,cls=CustomerJson))
2. json.dumps (&json.loads)
with open('data.json', 'w') as f: #将data数据以json的格式写入文件中。
json.dump(data, f)# Reading data back
with open('data.json', 'r') as f: #从json文件中读取数据
data= json.load(f)
值得一提的是json.dump的参数(json.dump基本相同),上面例子也有用到过,具体可以在需要时查询。我想分享的是参数indent,它表示的是json中的缩进,可以设为2或者4。这样的好处在于,当我们用IDE打开json时,如果是没有缩进,数据是一行,打开比较慢。而又缩进可以加快IDE对它的解析速度。当然如果文件比较小的话,速度上看不出什么区别。