当前位置: 首页 > news >正文

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序列化。

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 json
from datetime import datetimeclass Person:def __init__(self, name, birth_date):self.name = nameself.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 json
from datetime import datetimeclass Person:def __init__(self, name, birth_date):self.name = nameself.birth_date = birth_datedef 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:00
print(person.name, person.birth_date)

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

http://www.lryc.cn/news/162588.html

相关文章:

  • PDFBOX和ASPOSE.PDF
  • 第51节:cesium 范围查询(含源码+视频)
  • YOLOv5改进算法之添加CA注意力机制模块
  • Jmeter系列-阶梯加压线程组Stepping Thread Group详解(6)
  • 图像的几何变换(缩放、平移、旋转)
  • 计算机网络第四章——网络层(上)
  • 【MyBatis】一、MyBatis概述与基本使用
  • Java事件机制简介 内含面试题
  • springMVC基础技术使用
  • UI设计师的发展前景是否超越了平面设计?
  • MyBatis的基本操作
  • 【Tomcat】在SpringBoot项目中,Tomcat是如何处理HTTP请求的
  • python开发基础篇1——后端操作K8s API方式
  • 【实践篇】Redis最强Java客户端(一)之Redisson入门介绍
  • 掌握AI助手的魔法工具:解密`Prompt`(提示)在AIGC时代的应用(下篇)
  • 十)Stable Diffussion使用教程:Lora
  • kafka学习-消费者
  • Alibaba(商品详情)API接口
  • OLED透明屏触控:引领未来科技革命的创新力量
  • Ubuntu下QT操作Mysql数据库
  • sqli --【1--10】
  • 《自然语言处理(NLP)的最新进展:Transformers与GPT-4的浅析》
  • Wireshark 用命令行分析数据包
  • LVS DR模式负载均衡群集部署
  • 探讨前后端分离开发的优势、实践以及如何实现更好的用户体验?
  • 微博一面:JVM预热,你的方案是啥?
  • open与fopen的区别
  • Unity记录一些glsl和hlsl的着色器Shader逆向代码
  • 基于Sentinel的微服务保护
  • Collectors类作用: