Python json序列化解读
目录
- json 模块
- json 序列化 基本使用方式
- 序列化
- dumps 方法中的参数
- 总结
json 模块
- JSON : 是 一种 轻量级的 数据交换格式 、独立于编程语言的 数据格式。
- 数据格式 简单 、清晰。 便于 网络间数据的传输。
json 序列化 基本使用方式
序列化
- python中的对象转成 JSON格式的字符串
import json
ls = [{"name": "张三", "age": 20}, {"name": "李四", "age": 22}]
jsonstr = jsjavascripton.dumps(ls)
print(jsonstr)
dumps 方法中的参数
skipkeys:JSON中 的键 只支持 字符串 、数字、布尔 、null 表示 ,如果 在 python 中 提供了不支持的键类型, 则 必须将 skipkeys 设置为 True
ls = [{"name": "张三", "age": 20, (1,2): 100, None: 1}, {"name": "李四", "age": 22}]
jsonstr = json.dumps(ls, skipkeys=True)
print(jsonstr)
ensure_ascii: 对 ascii 之外的数据 进行 Unicode 编码 , 如果希望不进行编码,可以设置为 False
ls = [{"name": "张三", "age": 20, (1,2): 100, None: 1}, {"name": "李四", "age": 22}]
jsonstr = json.dumps(ls, skipkeys=True, ensure_ascii=False)
indent: 对 json 进行美化, 值是 一个 数字 、推荐使用 4allow_nan: 对序列化的数据 是python否 支持 非数 float(“nan”) 、 正无穷 float(“inf”) 、 负无穷 float(“-inf”)default: 可以对 无法序列化的 对象 进行 特殊处理 (在序列化的时候,无法处理的类型 会触发 default 函数的调用。)
import json
class Person:
def __init__(self, name, age):
self.name = name
self.age = age
if __name__ == '__main__':
p1 = Person(name="张三", age=20) # p1.__dict__ : 可以获取一个对象的 字典表示形式。
p2 = Person(name="李四", age=21)
p3 = Person(namhttp://www.devze.come="王五", age=22)
p4 = Person(name="赵六", age=20)
person_list = [p1, p2, p3, p4]
# 使用 JSON 序列化 将数据 转成 JSON字符串
json_string = json.dumps(person_list, ensure_ascii=False, default=lambda obj: obj.__dict__, indent=2)
print(json_string)
cls: 允许定义一个类 、该类需要 继承 json.JSONEncoder ,并重写 父类 中 default 方法, 解决数据无法序列化的问题。
from datetime import date, datetime
class Person:
def __init__(self, name, age, birth=None):
self.name = name
self.age = age
self.birth = birth
class JsonEncoder(json.JSONEncoder):
def default(self, o):
if hasattr(o, "__dict__"):
return o.__dict__
if isinstance(o, date):
return o.strftime('%Y-%m-%d')
if isinstance(o, datetime):
return o.strftime('%Y-%m-%d %H:%M:%S')
return sthttp://www.devze.comr(o)
if __name__ == '__main__':
p1 = Person(name="张三", age=20, birth=date(2000, 10, 10))
print(p1.__dict__)
p2 = Person(name="李四", age=21)
p3 = Person(name="王五", age=22)
p4 = Person(name="赵六", age=20)
person_list = [p1, p2, p3, p4]
# 使用 JSON 序列化 将数据 转成 JSON字符串
json_string = json.dumps(person_list, ensure_ascii=False, cls=JsonEncoder, indent=2)
print(json_string)php
- loads(string , object_hook=None)
import json
from datetime import date, datetime
# 创建一个 json格式的字符串
string = '[{"name": "张三", "age": 20, "birth": "1990-10-10"}, {"name": "李四", "age": 20, "birth": "1990-10-10"}]'
class Person:
def __init__(self, name, age, birth=None):
self.name = name
self.age = age
self.birth = birth
def __repr__(self):
return str(self.__dict__)
def test(kwargs):
if "birth" in kwargs:
kwargs["birth"] = datetime.strptime(kwargs["birth"], '%Y-%m-%d').date()
return Person(**kwargs)
# 将 该字符串转成列表
ls = json.loads(string, object_hook=test)
print(ls)
总结
以上为个人经验,希望能给大家一个参考,也希望大家多多支持编程客栈(www.devze.com)。
加载中,请稍侯......
精彩评论