Python(18)Python中JSON的妙用:详解序列化与反序列化原理及实战案例

目录

      • 一、背景:为什么Python需要JSON?
      • 二、核心技术解析:序列化与反序列化
        • 2.1 核心概念
        • 2.2 类型映射对照表
      • 三、Python操作JSON的四大核心方法
        • 3.1 基础方法库
        • 3.2 方法详解
          • 1. json.dumps()
          • 2. json.loads()
          • 3. json.dump()
          • 4. json.load()
      • 四、实战进阶案例
        • 4.1 自定义对象序列化
        • 4.2 复杂数据结构处理
        • 4.3 性能优化技巧
      • 五、最佳实践总结
        • Python相关文章(推荐)

一、背景:为什么Python需要JSON?

‌JSON(JavaScript Object Notation)‌作为轻量级的数据交换格式,在Python开发中占据着不可替代的地位。根据2023年Stack Overflow调查报告,JSON在Web API领域的应用率高达89.3%,其核心优势体现在:

  1. 跨平台兼容性‌:独立于编程语言的通用格式
  2. 数据结构友好‌:完美映射Python字典和列表
  3. 高效可读性‌:相比XML节省30%-50%的数据体积
  4. 网络传输优化‌:支持流式传输,降低带宽消耗

当Python需要与Java服务通信或存储配置信息时,JSON凭借其标准化结构,成为不同系统间数据交互的"通用货币"。

二、核心技术解析:序列化与反序列化

2.1 核心概念
  • 序列化(Serialization)‌:将内存中的对象转换为可存储/传输的格式
Python对象 → JSON字符串
  • ‌反序列化(Deserialization)‌:将序列化数据还原为程序可操作的对象
JSON字符串 → Python对象
2.2 类型映射对照表
JSON类型Python类型
objectdict
arraylist
stringstr
numberint/float
trueTrue
falseFalse
nullNone

三、Python操作JSON的四大核心方法

3.1 基础方法库
import json
3.2 方法详解
1. json.dumps()
# 将Python对象转为JSON字符串
data = {"name": "Alice", "age": 28, "skills": ["Python", "SQL"]}
json_str = json.dumps(data, indent=2)
print(json_str)

输出结果:

{"name": "Alice","age": 28,"skills": ["Python","SQL"]
}

‌关键参数说明:‌

indent:缩进量(美化输出)
sort_keys:是否按键排序(默认False)
ensure_ascii:中文字符处理(默认True)

2. json.loads()
# 将JSON字符串转为Python对象
received_data = '{"city": "Beijing", "population": 2154}'
py_dict = json.loads(received_data)
print(type(py_dict))  # <class 'dict'>
print(py_dict['population'])  # 2154
3. json.dump()
# 将对象序列化后写入文件
config = {"debug_mode": False,"max_connections": 10,"timeout": 30.5
}with open('config.json', 'w', encoding='utf-8') as f:json.dump(config, f, ensure_ascii=False)
4. json.load()
# 从文件加载并反序列化
with open('config.json', 'r', encoding='utf-8') as f:loaded_config = json.load(f)print(loaded_config['timeout'])  # 30.5

四、实战进阶案例

4.1 自定义对象序列化
class User:def __init__(self, name, email):self.name = nameself.email = email# 自定义编码器
class UserEncoder(json.JSONEncoder):def default(self, obj):if isinstance(obj, User):return {'name': obj.name, 'email': obj.email}return super().default(obj)user = User("Bob", "bob@example.com")
print(json.dumps(user, cls=UserEncoder))  # {"name": "Bob", "email": "bob@example.com"}
4.2 复杂数据结构处理
data = {"timestamp": datetime.datetime.now(),"metrics": {"CPU": 78.2,"Memory": 2048}
}# 使用lambda处理非标准类型
json_str = json.dumps(data, default=lambda o: o.isoformat() if isinstance(o, datetime.datetime) else o.__dict__)
4.3 性能优化技巧
# 使用ujson加速(性能提升3-5倍)
import ujsonlarge_data = [{"id": i} for i in range(100000)]
ujson.dumps(large_data)  # 比标准库快3倍

五、最佳实践总结

  1. 数据验证‌:使用JSON Schema进行格式校验
  2. 编码规范‌:统一使用UTF-8编码
  3. 安全注意‌:避免直接加载不可信来源的JSON
  4. 性能选择‌:大数据量场景考虑orjson/ujson
  5. 版本兼容‌:使用try-except处理字段缺失
序列化
网络传输
反序列化
Python对象
JSON字符串
远程服务
其他语言对象

通过掌握JSON的序列化技术,开发者可以:

  • 轻松实现微服务架构中的数据交换
  • 构建跨平台的配置文件系统
  • 优化前后端分离架构的数据传输
  • 提升分布式系统的协作效率
Python相关文章(推荐)
Python全方位指南Python(1)Python全方位指南:定义、应用与零基础入门实战
Python基础数据类型详解Python(2)Python基础数据类型详解:从底层原理到实战应用
Python循环Python(3)掌握Python循环:从基础到实战的完整指南
Python列表推导式Python(3.1)Python列表推导式深度解析:从基础到工程级的最佳实践
Python生成器Python(3.2)Python生成器深度全景解读:从yield底层原理到万亿级数据处理工程实践
Python函数编程性能优化Python(4)Python函数编程性能优化全指南:从基础语法到并发调优
Python数据清洗Python(5)Python数据清洗指南:无效数据处理与实战案例解析(附完整代码)
Python邮件自动化Python(6)Python邮件自动化终极指南:从零搭建企业级邮件系统(附完整源码)
Python通配符基础Python(7)Python通配符完全指南:从基础到高阶模式匹配实战(附场景化代码)
Python通配符高阶Python(7 升级)Python通配符高阶实战:从模式匹配到百万级文件处理优化(附完整解决方案)
Python操作系统接口Python(8)Python操作系统接口完全指南:os模块核心功能与实战案例解析
Python代码计算全方位指南Python(9)Python代码计算全方位指南:从数学运算到性能优化的10大实战技巧
Python数据类型Python(10)Python数据类型完全解析:从入门到实战应用
Python判断语句Python(11)Python判断语句全面解析:从基础到高级模式匹配
Python参数传递Python(12)深入解析Python参数传递:从底层机制到高级应用实践
Python面向对象编程Python(13)Python面向对象编程入门指南:从新手到类与对象(那个她)的华丽蜕变
Python内置函数Python(14)Python内置函数完全指南:从基础使用到高阶技巧
Python参数传递与拷贝机制Python(15)Python参数传递与拷贝机制完全解析:从值传递到深拷贝实战
Python文件操作Python(16)Python文件操作终极指南:安全读写与高效处理实践
Python字符编码Python(17)Python字符编码完全指南:从存储原理到乱码终结实战

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/901661.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【物联网】基于LORA组网的远程环境监测系统设计

基于LORA组网的远程环境监测系统设计 演示视频: 简介: 1.本系统有一个主机,两个从机。 2.一主多从的LORA组网通信,主机和两个从机都配备了STM32F103单片机与 LoRa 模块,主机作为中心设备及WIFI网关,负责接收和发送数据到远程物联网平台和手机APP,两个从机则负责采集数…

通过金融科技(Fintech)掌控财务:智能理财管理指南

李升伟 编译 在当今世界&#xff0c;科技几乎重塑了我们生活的方方面面&#xff0c;包括金钱的管理方式。金融科技&#xff08;Fintech&#xff09;让个人财务管理变得前所未有的便捷、高效和智能。从追踪支出到投资理财、提升信用评分&#xff0c;金融科技工具赋予个人掌控财…

html-css样式

1. 所有类型为文本的 元素的样式 指定所有类型为文本的 元素的样式 /* 文本框的样式 */ input[type"text"] { font-size: 25px;width: 80px; /* 文本框的宽度 */ padding: 25px; } font-size&#xff1a;字体大小 width&#xff1a;文本框宽度 padding&#…

【C语言基础】C++ 中的 `vector` 及其 C 语言实现详解

一、C 中的 vector&#xff1a;动态数组的核心特性 1. 基本概念 vector 是 C 标准模板库&#xff08;STL&#xff09;中的动态数组容器&#xff0c;支持自动扩容、高效元素访问和丰富的操作接口。其核心特性包括&#xff1a; 动态内存管理&#xff1a;自动调整容量&#xff0…

nvm切换node版本后,解决npm找不到的问题

解决方法如下 命令行查看node版本 node -v找到node版本所对应的npm版本 点击进入node版本 npm对应版本下载 点击进入npm版本 下载Windows 压缩包 下载完成后&#xff0c;解压&#xff0c;文件改名为npm 复制到你nvm对应版本的node_modules 下面 将下载的npm /bin 目录…

数据结构:最小生成树的普里姆算法和克鲁斯卡尔算法

对于一个带权&#xff08;假设每条边上的权均为大于零的实数&#xff09;连通无向图 G 中的不同生成树&#xff0c;其每棵树的所有边上的权值之和也可能不同&#xff1b;图的所有生成树中具有边上的权值之和最小的树称为图的最小生成树&#xff08;Minimal Spanning Tree&#…

Information-Theoretic Limits of Bistatic Integrated Sensing and Communication

摘要 双静态感知指的是发射器&#xff08;照亮目标&#xff09;和感知接收器&#xff08;估计目标状态&#xff09;在物理上分离的场景&#xff0c;这与发射和感知功能共存的单静态感知形成对比。在实际场景中&#xff0c;双静态感知可能需要应对系统约束&#xff0c;或者作为…

XCTF-web(四)

unserialize3 需要反序列化一下&#xff1a;O:4:“xctf”:2:{s:4:“flag”;s:3:“111”;} php_rce 题目提示rce漏洞&#xff0c;测试一下&#xff1a;?s/Index/\think\app/invokefunction&functioncall_user_func_array&vars[0]phpinfo&vars[1][]1 flag&#xff1…

Java Stream深度解析 高阶技巧与性能优化实战

文章目录 一、Stream底层机制揭秘1.1 Stream流水线架构1.2 Spliterator探秘 二、自定义收集器高级实现2.1 实现高性能统计收集器2.2 多级分组优化技巧 三、并行流深度优化3.1 并行度控制策略3.2 工作窃取(Work-Stealing)优化 四、无限流与短路操作4.1 生成无限质数流4.2 短路操…

TailwindCss快速上手

什么是Tailwind Css? 一个实用优先的 CSS 框架&#xff0c;可以直接在标记中组合以构建任何设计。 开始使用Tailwind Css 如何安装 下面是使用vite构建工具的方法 ①安装 Tailwind CSS: tailwindcss通过tailwindcss/vitenpm安装。 npm install tailwindcss tailwindcss…

Web前端 (CSS篇)

什么是CSS&#xff1f; css(Cascading Style Sheets)是层叠样式表或级联样式表&#xff0c;是一组设置规则&#xff0c;用于控制web页面外观。 为什么使用CSS? CSS 用于定义网页的样式&#xff0c;包括针对不同设备和屏幕尺寸的设计和布局。 CSS 实例 body {background-col…

微服务2--服务治理与服务调用

前言 &#xff1a;本文主要阐述微服务架构中的服务治理&#xff0c;以及Nacos环境搭建、服务注册、服务调用&#xff0c;负载均衡以及Feign实现服务调用。 服务治理 服务治理是微服务架构中最核心最基本的模块。用于实现各个微服务的自动化注册与发现。 服务注册&#xff1a;在…

智能麻将出牌组件

开篇引言​ 麻将作为一款风靡全球的策略性游戏&#xff0c;其复杂的规则和多变的牌局给玩家带来了无尽乐趣。在数字化时代&#xff0c;运用编程技术为麻将游戏赋予智能&#xff0c;实现自动出牌功能&#xff0c;不仅能提升玩家体验&#xff0c;还能深入探索算法在博弈游戏中的…

“大湾区珠宝艺境花园”璀璨绽放第五届消博会

2025年4月13日&#xff0c;第五届中国国际消费品博览会&#xff08;以下简称"消博会"&#xff09;重要主题活动——《大湾区珠宝艺境花园》启动仪式在海南国际会展中心2号馆隆重举行。由广东省金银珠宝玉器业厂商会组织带领粤港澳大湾区优秀珠宝品牌&#xff0c;以“…

基于前端技术的QR码API开发实战:从原理到部署

前言 QR码&#xff08;Quick Response Code&#xff09;是一种二维码&#xff0c;于1994年开发。它能快速存储和识别数据&#xff0c;包含黑白方块图案&#xff0c;常用于扫描获取信息。QR码具有高容错性和快速读取的优点&#xff0c;广泛应用于广告、支付、物流等领域。通过扫…

利用耦合有限元和神经网络计算的骨重塑模拟多尺度方法

Multiscale methodology for bone remodelling simulation using coupled finite element and neural network computation 摘要&#xff1a;本文旨在开发一种基于有限元分析&#xff08;FEA&#xff09;和神经网络&#xff08;NN&#xff09;计算的多尺度分层混合模型&#xf…

使用异步特征引发的错误error[E0195]: lifetime parameters or bounds on method `before_save`

问题描述&#xff1a; 使用SeaOrm保存实体到数据库时不想每次都设置更新时间&#xff0c;所以想通过实现ActiveModelBehavior在保存实体前统一设置更新时间 impl ActiveModelBehavior for ActiveModel {async fn before_save<C>(self, _db: &C, _insert: bool) -&…

TVS管与ESD保护二极管详解:原理、区别与应用选型

一、TVS管&#xff08;瞬态电压抑制二极管&#xff09; 1. 基本定义 TVS管&#xff08;Transient Voltage Suppressor&#xff09; 是一种用于抑制瞬态高压脉冲的半导体器件&#xff0c;通过雪崩击穿效应快速钳位电压&#xff0c;保护后端电路。 2. 核心特性参数 参数定义公…

Day08 【基于jieba分词实现词嵌入的文本多分类】

基于jieba分词的文本多分类 目标数据准备参数配置数据处理模型构建主程序测试与评估测试结果 目标 本文基于给定的词表&#xff0c;将输入的文本基于jieba分词分割为若干个词&#xff0c;然后将词基于词表进行初步编码&#xff0c;之后经过网络层&#xff0c;输出在已知类别标…

入门-C编程基础部分:6、常量

飞书文档https://x509p6c8to.feishu.cn/wiki/MnkLwEozRidtw6kyeW9cwClbnAg C 常量 常量是固定值&#xff0c;在程序执行期间不会改变&#xff0c;可以让我们编程更加规范。 常量可以是任何的基本数据类型&#xff0c;比如整数常量、浮点常量、字符常量&#xff0c;或字符串字…