赞
踩
json模块,是python内部的一个模块,可以将python的数据格式转换为json格式的数据,也可以将json格式的数据转换为python的数据格式
json格式,是一个数据格式(本质上就是字符串,常用于网络数据传输)
python中的数据格式
data=[
{'id':1,name:'wxy'},
('wxy1',123)
]
JSON格式
data='[{"id":1,name:"wxy"},["wxy1",123]]'
注意:【 json中字符串要用""(双引号)】
python数据类型与json格式的相互转换
python数据类型---->json【序列化】
import json
data=[
{'id':1,'name':'小红'},
('wxy1',123)
]
res=json.dumps(data)
print(res) #'[{"id": 1, "name": "\u5c0f\u7ea2"}, ["wxy1", 123]]'
#ensure_ascii=False,显示中文
res1=json.dumps(data,ensure_ascii=False)
print(res1)#'[{"id": 1, "name": "小红"}, ["wxy1", 123]]'
json---->python数据类型【反序列化】
import json
data='[{"id":1,"name":"王晓宇"},["wxy1",123]]'
res=json.loads(data)
print(res) #[{'id': 1, 'name': '王晓宇'}, ['wxy1', 123]]
python的数据类型转换为json格式,对数据类型有要求,默认只支持:
+-------------------+---------------+ | Python | JSON | +===================+===============+ | dict | object | +-------------------+---------------+ | list, tuple | array | +-------------------+---------------+ | str | string | +-------------------+---------------+ | int, float | number | +-------------------+---------------+ | True | true | +-------------------+---------------+ | False | false | +-------------------+---------------+ | None | null | +-------------------+---------------+
其他类型想要支持,需要自定义JSONEncoder才能实现
import json from decimal import Decimal from datetime import datetime data = [ {"id": 1, "name": "小红", "age": 18, 'size': Decimal("18.99"), 'ctime': datetime.now()}, {"id": 2, "name": "wxy", "age": 18, 'size': Decimal("9.99"), 'ctime': datetime.now()}, ] class MyJSONEncoder(json.JSONEncoder): def default(self, o): if type(o)==Decimal: return str(0) elif type(o)==datetime: return o.strftime('%Y-%m-%d') return super().default(o) res=json.dumps(data,cls=MyJSONEncoder,ensure_ascii=False) print(res) #[{"id": 1, "name": "小红", "age": 18, "size": "0", "ctime": "2022-01-03"}, {"id": 2, "name": "wxy", "age": 18, "size": "0", "ctime": "2022-01-03"}]
json.dumps,序列化生成一个json字符串
json.loads,反序列化生成python数据类型
json.dump,将数据序列化并写入文件【不常用】
import json
data=[
{'id':1,'name':'小红'},
('wxy1',123)
]
f=open('files/a.json',mode='w',encoding='utf-8')
json.dump(data,f,ensure_ascii=False)
f.close()
json.load,读取文件中的数据并反序列化为python的数据类型【不常用】
import json
f=open('files/a.json',mode='r',encoding='utf-8')
res=json.load(f)
f.close()
print(res,type(res))
#[{'id': 1, 'name': '小红'}, ['wxy1', 123]] <class 'list'>
data = [{"a": "1", "b": "2"}, {"a": "1", "b": "2"}]
with open('data/data.json', 'w') as json_file:
for item in data:
print(item)
json.dump(item, json_file, ensure_ascii=False) # ensure_ascii=False保存中文
json_file.write('\n')
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。