Python json序列化时default/object_hook指定函数处理

在Python中,json.dumps函数接受参数default用于指定一个函数,该函数能够把自定义类型的对象转换成可序列化的基本类型。json.loads函数接受参数objec_thook用于指定函数,该函数负责把反序列化后的基本类型对象转换成自定义类型的对象。

boy1 = boy('Will', 20)

#default method for decode
def boydefault(obj):
    if isinstance(obj, boy):
        return {'name': obj.name, 'age': obj.age}
    return obj;

def boyhook(dic):
    print('test')
    if dic['name']:
        return boy(dic['name'], dic['age'])
    return dic

boy_encode_str = json.dumps(boy1, default=boydefault)
new_boy = json.loads(boy_encode_str, object_hook=boyhook)
print(boy_encode_str)
print(new_boy)
  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
`object_hook` 是在 Python 的 `json` 模块中的一个可选参数,它允许我们在将 JSON 数据转换为 Python 对象对其进行自定义处理。具体来说,`object_hook` 是一个回调函数,它接收一个字典作为参数,返回一个 Python 对象。当 `json.loads()` 函数解析 JSON 数据,如果指定了 `object_hook` 参数,则会在每次解析一个 JSON 对象调用该函数,将解析出的字典传入该函数进行自定义处理,最终返回转换后的 Python 对象。 举个例子,假设我们有如下的 JSON 数据: ```json { "name": "John", "age": 30, "city": "New York" } ``` 如果我们想将其转换为一个自定义的 Python 类型 `Person`,可以定义一个 `object_hook` 函数来实现: ```python import json class Person: def __init__(self, name, age, city): self.name = name self.age = age self.city = city def json_to_person(json_str): def person_hook(obj): return Person(obj['name'], obj['age'], obj['city']) return json.loads(json_str, object_hook=person_hook) json_str = '{"name": "John", "age": 30, "city": "New York"}' person = json_to_person(json_str) print(person.name) # John print(person.age) # 30 print(person.city) # New York ``` 在上面的代码中,我们定义了一个 `Person` 类型和一个 `json_to_person` 函数,后者接收一个 JSON 字符串作为参数,并通过 `json.loads()` 函数将其转换为 Python 对象。同,我们还定义了一个 `person_hook` 函数作为 `object_hook` 参数,用来将解析出的字典转换为 `Person` 对象。最后,我们调用 `json_to_person` 函数并打印出转换后的 `Person` 对象的属性值。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值