• 13 Python使用Json


    概述

            在上一节,我们介绍了如何在Python中使用xml,包括:SAX、DOM、ElementTree等内容。在这一节,我们将介绍如何在Python中使用Json。Json的英文全称为JavaScript Object Notation,中文为JavaScript对象表示法,是一种存储和交换文本信息的语法,类似XML。Json作为轻量级的文本数据交换格式,比XML更小、更快,更易解析,也更易于阅读和编写。

            在Python中使用Json非常简单,因为Python有一个内置的json模块,可以专门用来处理Json数据

    Json序列化

            在Python中,可以使用json模块将Python对象序列化为Json字符串,这个过程我们称为Json序列化。

    1. import json
    2. data = {
    3. 'Name': 'Lucy',
    4. 'Age': 18,
    5. 'City': 'London'
    6. }
    7. json_data = json.dumps(data)
    8. # 输出:{"Name": "Lucy", "Age": 18, "City": "London"}
    9. print(json_data)

            在上面的示例代码中,我们首先导入了json模块,然后创建了一个字典data,最后使用json.dumps()函数将这个字典转换为Json字符串。

    Json反序列化

            在Python中,可以使用json模块将Json字符串反序列化为Python对象,这个过程我们称为Json反序列化。

    1. import json
    2. json_data = '{"Name": "Lucy", "Age": 18, "City": "London"}'
    3. data = json.loads(json_data)
    4. # 输出:{'Name': 'Lucy', 'Age': 18, 'City': 'London'}
    5. print(data)

            在上面的示例代码中,我们首先导入了json模块,然后创建了一个Json字符串json_data,最后使用json.loads()函数将这个Json字符串转换为了Python的字典。

            注意:json.loads()函数只能将Json字符串转换为Python对象,而不能直接将Json数据转换为Python对象。如果有一个从网络或文件读取的Json数据,你需要先将其转换为字符串,然后再使用json.loads()函数进行反序列化。

    读Json文件

            在Python中,可以使用json模块从文件中读取Json数据,并将其反序列化为Python对象。

    1. import json
    2. with open('test.json', 'r') as file:
    3. data = json.load(file)
    4. print(data)

            在上面的示例代码中,我们首先导入了json模块,然后使用open()函数打开了一个名为test.json 的文件,最后使用json.load()函数从文件中读取Json数据,并将其转换为Python对象。注意:需要确保Json数据是有效的,否则 会抛出json.decoder.JSONDecodeError异常。

    写Json文件

            在Python中,可以使用json模块将Python对象序列化为Json字符串,并将该字符串写入文件。

    1. import json
    2. data = {
    3. 'Name': 'Lucy',
    4. 'Age': 18,
    5. 'City': 'London'
    6. }
    7. with open('test.json', 'w') as file:
    8. json.dump(data, file)

            在上面的示例代码中,我们首先导入了json模块,然后创建了一个字典data,最后使用json.dump()函数将字典data序列化为Json字符串,并将该字符串写入文件。

    将类对象转换为Json

            在Python中,可以使用自定义的JSONEncoder类将类对象转换为Json。

    1. import json
    2. from datetime import datetime
    3. class Person:
    4. def __init__(self, name, birth_date):
    5. self.name = name
    6. self.birth_date = birth_date
    7. class PersonEncoder(json.JSONEncoder):
    8. def default(self, obj):
    9. if isinstance(obj, Person):
    10. return {
    11. 'Name': obj.name,
    12. 'Birth_date': obj.birth_date.strftime('%Y-%m-%d') if obj.birth_date else None
    13. }
    14. return super().default(obj)
    15. person = Person('Lucy', datetime.now())
    16. json_str = json.dumps(person, cls = PersonEncoder)
    17. # 输出:{"Name": "Lucy", "Birth_date": "2023-09-03"}
    18. print(json_str)

            在上面的示例代码中,我们首先定义了一个名为Person的类,然后创建了一个该类的实例。接下来,我们定义了一个名为PersonEncoder的子类,继承自json.JSONEncoder,并重写了其default方法。该方法会检查传入的对象是否是Person的实例,如果是,则将其转换为一个字典,该字典包含对象的所有属性。最后,我们使用json.dumps()函数将对象转换为Json字符串,并将cls参数设置为PersonEncoder,以便使用我们自定义的编码方式。

    将Json转换为类对象

            在Python中,可以使用自定义的JSONDecoder类将Json转换为类对象。

    1. import json
    2. from datetime import datetime
    3. class Person:
    4. def __init__(self, name, birth_date):
    5. self.name = name
    6. self.birth_date = birth_date
    7. def custom_object_hook(obj):
    8. return Person(obj['name'], datetime.strptime(obj['birth_date'], '%Y-%m-%d'))
    9. json_str = '{"name": "Lucy", "birth_date": "2022-02-02"}'
    10. decoder = json.JSONDecoder(object_hook = custom_object_hook)
    11. person = decoder.decode(json_str)
    12. # 输出:Lucy 2022-02-02 00:00:00
    13. print(person.name, person.birth_date)

            在上面的示例代码中,我们首先定义了一个名为Person的类和一个名为custom_object_hook的函数,该函数将对象转换为类的实例。然后,创建了一个json.JSONDecoder对象,并传递了custom_object_hook函数作为参数。最后,我们使用decode方法解析了一个Json字符串,将其转换为Python的字典类型,并通过custom_object_hook函数转换为Person类对象。

  • 相关阅读:
    代码随想录算法训练营DAY37|C++贪心算法Part.6|738.单调递增的数字、968.监控二叉树、贪心算法总结
    13 | k8s的部署策略
    约定式提交 commit 规范
    基于vue3+pinia2仿ChatGPT聊天实例|vite4.x仿chatgpt界面
    增强拉格朗日数字图像相关和跟踪研究(Matlab代码实现)
    SpringBoot 过滤器和拦截器的区别
    利用 Rainbond 云原生平台简化 Kubernetes 业务问题排查
    Shell综合应用案例,归档文件、发送消息
    ChatGPT ,AIGC 办公函数案例用5种方法实现区间计算
    对称加密算法———AES算法
  • 原文地址:https://blog.csdn.net/hope_wisdom/article/details/132795943