30天拿下Python之使用Json

希望睿智 2024-06-28 07:51:39

💡 如果想阅读最新的文章,或者有技术问题需要交流和沟通,可搜关注微信公众号号号“希望睿智”。

概述

在上一节,我们介绍了如何在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序列化。

import jsondata = {    'Name': 'Lucy',    'Age': 18,    'City': 'London'}json_data = json.dumps(data)# 输出:{"Name": "Lucy", "Age": 18, "City": "London"}print(json_data)

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

Json反序列化

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

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

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

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

读Json文件

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

import jsonwith open('test.json', 'r') as file:    data = json.load(file)    print(data)

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

写Json文件

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

import json    data = {    'Name': 'Lucy',    'Age': 18,    'City': 'London'}  with open('test.json', 'w') as file:      json.dump(data, file)

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

将类对象转换为Json

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

import jsonfrom datetime import datetimeclass Person:    def __init__(self, name, birth_date):        self.name = name        self.birth_date = birth_dateclass PersonEncoder(json.JSONEncoder):    def default(self, obj):        if isinstance(obj, Person):            return {                'Name': obj.name,                'Birth_date': obj.birth_date.strftime('%Y-%m-%d') if obj.birth_date else None            }                return super().default(obj)person = Person('Lucy', datetime.now())json_str = json.dumps(person, cls = PersonEncoder)# 输出:{"Name": "Lucy", "Birth_date": "2023-09-03"}print(json_str)

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

将Json转换为类对象

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

import jsonfrom datetime import datetimeclass Person:    def __init__(self, name, birth_date):        self.name = name        self.birth_date = birth_date  def custom_object_hook(obj):    return Person(obj['name'], datetime.strptime(obj['birth_date'], '%Y-%m-%d'))  json_str = '{"name": "Lucy", "birth_date": "2022-02-02"}'decoder = json.JSONDecoder(object_hook = custom_object_hook)person = decoder.decode(json_str)# 输出:Lucy 2022-02-02 00:00:00print(person.name, person.birth_date)

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

0 阅读:25

希望睿智

简介:软件技术分享,一起学习,一起成长,一起进步