Python学习基础笔记七十七——json序列化

客户端和服务端之间需要交换数据才能完成各种功能。

假设 服务端程序都是用Python语言开发的话,那么

服务端从数据库中获取的最近的交易列表,可能就是像下面这样的一个Python列表对象:

historyTransactions = [{'time'   : '20170101070311',  # 交易时间'amount' : '3088',            # 交易金额'productid' : '45454455555',  # 货号'productname' : 'iphone7'     # 货名},{'time'   : '20170101050311',  # 交易时间'amount' : '18',              # 交易金额'productid' : '453455772955', # 货号'productname' : '奥妙洗衣液'   # 货名},...
]

我们怎样把存在于内存中的数据对象传递给客户端呢?

通常,我们把程序的各种类型的数据对象变成表示该数据对象的字节串,这个过程称之为序列化。

把字节串转化为程序中的数据对象,这个过程称之为反序列化。

通常我们的传输协议(通常是http协议)传送信息,传输的都是序列化好的字节串。

而不同的客户端、服务端程序可能使用不同的语言。为了方便不同的编程语言的处理,这个序列化的格式应该是各种语言都方便处理的。

XML的一个弊端就是 序列化性能相对比较低, 而且转化后的数据体积增大很多。

最近的主流方案就是JSON。

JSON(Javascript Object Notation, JS对象标识) 是一种轻量级的数据交换格式。

它是Javascript规范里面定义的,它是一种文本格式来存储和表示数据。

它的特点是简洁并且清晰,人都能很容易地看明白。

也方便程序的解析和生成。

任何编程语言都可以使用这种格式。而且很多编程语言的解释器都内置了库,可以很方便地进行序列化和反序列化。包括Python和javascript等。

序列化和反序列化:

Python中内置了json这个库,可以 方便的把内置的数据对象 序列化json格式文本的字符串。

import jsonhistoryTransactions = [{'time': '20170101070311',  # 交易时间'amount': '3088',            # 交易金额'productid': '45454455555',  # 货号'productname': 'iphone7'     # 货名},{'time': '20170101050311',  # 交易时间'amount': '18',              # 交易金额'productid': '453455772955', # 货号'productname': '奥妙洗衣液'   # 货名}
]# dumps()方法将数据对象序列化为json格式的字符串
jsonstr = json.dumps(historyTransactions)# 打印json格式的字符串
print(jsonstr)

执行结果:

C:\Users\changchunhua\AppData\Local\Programs\Python\Python311\python.exe D:\PythonCode\chang\my.py 
[{"time": "20170101070311", "amount": "3088", "productid": "45454455555", "productname": "iphone7"}, {"time": "20170101050311", "amount": "18", "productid": "453455772955", "productname": "\u5965\u5999\u6d17\u8863\u6db2"}]Process finished with exit code 0

当然有些不同,比如字符串只能用双引号列表最后一个元素后面不能有逗号等。

序列化后的结果,也是一个!!!字符串。 json格式本身就是一个字符串。

然后我们可以存储到文件,或者从网络发送出去。

这样就完成了数据对象的发送。

因为网络中是无法直接传输你内存中的数据对象的。

json.dumps方法中发现字符串如果有非ascii码字符,缺省的就用该字符的unicode数字来表示。

import jsonhistoryTransactions = [{'time': '20170101070311',  # 交易时间'amount': '3088',            # 交易金额'productid': '45454455555',  # 货号'productname': 'iphone7'     # 货名},{'time': '20170101050311',  # 交易时间'amount': '18',              # 交易金额'productid': '453455772955', # 货号'productname': '奥妙洗衣液'   # 货名}
]# dumps()方法将数据对象序列化为json格式的字符串
jsonstr = json.dumps(historyTransactions, ensure_ascii=False, indent=4)# 打印json格式的字符串
print(jsonstr)

执行结果:

C:\Users\changchunhua\AppData\Local\Programs\Python\Python311\python.exe D:\PythonCode\chang\my.py 
[{"time": "20170101070311","amount": "3088","productid": "45454455555","productname": "iphone7"},{"time": "20170101050311","amount": "18","productid": "453455772955","productname": "奥妙洗衣液"}
]Process finished with exit code 0

接收方如果也是Python开发的,可以使用json库中的loads方法。把json格式的字符串变成Python中的数据对象。

import jsonhistoryTransactions = [{'time': '20170101070311',  # 交易时间'amount': '3088',            # 交易金额'productid': '45454455555',  # 货号'productname': 'iphone7'     # 货名},{'time': '20170101050311',  # 交易时间'amount': '18',              # 交易金额'productid': '453455772955', # 货号'productname': '奥妙洗衣液'   # 货名}
]# dumps()方法将数据对象序列化为json格式的字符串
jsonstr = json.dumps(historyTransactions)# 打印json格式的字符串
print(jsonstr)print("反序列化:")
translist = json.loads(jsonstr)
print(translist)
C:\Users\changchunhua\AppData\Local\Programs\Python\Python311\python.exe D:\PythonCode\chang\my.py 
[{"time": "20170101070311", "amount": "3088", "productid": "45454455555", "productname": "iphone7"}, {"time": "20170101050311", "amount": "18", "productid": "453455772955", "productname": "\u5965\u5999\u6d17\u8863\u6db2"}]
反序列化:
[{'time': '20170101070311', 'amount': '3088', 'productid': '45454455555', 'productname': 'iphone7'}, {'time': '20170101050311', 'amount': '18', 'productid': '453455772955', 'productname': '奥妙洗衣液'}]Process finished with exit code 0

我们看下:

发序列化后,是一个列表对象。然后程序就是列表操作了,应该是非常简单的。
Python中的数据对象,是单引号。然后也变成了中文。

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

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

相关文章

mysql过期数据的清理方案(Java/springboot+mybatis)

比如说现在数据库表信息增加的很快&#xff0c;然后我们需要对每个表设置过期删除策略&#xff1b; 大概思路就是&#xff1a;定时任务调度&#xff0c;给每个表制定sql&#xff0c;然后执行删除数据的sql //删除一个月前的数据 delete FROM test_info WHERE create_time <…

C++初阶--C++入门(2)

C入门&#xff08;1&#xff09;链接入口 文章目录 内联函数auto关键字注意事项 基于范围的for循环(C11)nullptr 内联函数 以inline修饰的函数叫做内联函数&#xff0c;编译时C编译器会在调用内联函数的地方展开&#xff0c;没有函数调用建立栈帧的开销&#xff0c;内联函数提…

ND协议——无状态地址自动配置 (SLAAC)

参考学习&#xff1a;计算机网络 | 思科网络 | 无状态地址自动配置 (SLAAC) | 什么是SLAAC_瘦弱的皮卡丘的博客-CSDN博客 与 IPv4 类似&#xff0c;可以手动或动态配置 IPv6 全局单播地址。但是&#xff0c;动态分配 IPv6 全局单播地址有两种方法&#xff1a; 如图所示&#…

『C++ - STL』之优先级队列( priority_queue )

文章目录 前言优先级队列的结构优先级队列的模拟实现仿函数 最终代码 前言 什么是优先级队列&#xff0c;从该名中可以知道他一定有队列的一定属性&#xff0c;即先入先出(LILO)&#xff0c;而这里的优先级则可以判断出它的另一个特点就是可以按照一定的条件将符合该条件的先进…

移动设备管理对企业IT 安全的增强

移动设备管理 &#xff08;MDM&#xff09; 是通过定义策略和部署安全控制&#xff08;如移动应用程序管理、移动内容管理和条件 Exchange 访问&#xff09;来管理移动设备的过程。 完整的MDM解决方案可以管理在Android&#xff0c;iOS&#xff0c;Windows&#xff0c;macOS&a…

【论文解读】单目3D目标检测 DD3D(ICCV 2021)

本文分享单目3D目标检测&#xff0c;DD3D 模型的论文解读&#xff0c;了解它的设计思路&#xff0c;论文核心观点&#xff0c;模型结构&#xff0c;以及效果和性能。 一、DD3D简介 DD3D是一种端到端、单阶段的单目3D目标检测方法&#xff0c;它在训练时用到了点云数据&#xf…

索引失效的几种情况

目录 数据准备&#xff1a; 1、查询条件中有or&#xff0c;索引会失效&#xff1b; 2、like查询以%开头 3、如果类型为字符串&#xff0c;查询条件中数据需用引号引起来&#xff0c;否则不走索引&#xff1b; 4、索引列上参与计算会导致索引失效 5、违背最左匹配原则 6、…

[Hive] explode

在 Hive 中&#xff0c;explode 函数用于将数组&#xff08;Array&#xff09;或者Map类型的列拆分成多行&#xff0c; 每个元素或键值对为一行。这允许我们在查询中对数组或 Map 进行扁平化操作。 下面是使用 explode 函数的示例&#xff1a; 假设我们有一个包含数组字段的表…

面试知识点--基础篇

文章目录 前言一、排序1. 冒泡排序2. 选择排序3. 插入排序4. 快速单边循环排序5. 快速双边循环排序6. 二分查找 二、集合1.List2.Map 前言 提示&#xff1a;以下是本篇文章正文内容&#xff0c;下面案例可供参考 一、排序 1. 冒泡排序 冒泡排序就是把小的元素往前调或者把大…

flutter 创建插件

资料&#xff1a; flutter与原生通信的方式简介 - 简书 完整流程 Flutter 集成 Golang 多语言跨端开发基础案例 - 知乎 https://www.cnblogs.com/webabcd/p/flutter_lib_plugin_plugin_ios.html 步骤1、创建插件 我创建的插件名字是konnect_im_sdk 选择的语言是 java和swi…

22款奔驰S400L升级原厂360全景影像 倒车更加的安全

您是否经历过这种场面呢&#xff1f; 停车位&#xff0c;狭窄障碍停车困难 避免盲区&#xff0c;倒车盲区危及生命安全 狭窄路段&#xff0c;无法判断是否安全通过 视角盲区&#xff0c;小孩站在视野盲区看不到&#xff0c;Xjh15863 360度无缝3D全车可见&#xff0c;解决各…

uniapp开发多端应用项目时的常见跨端兼容处理

一、跨端兼容 每个端有每个端的特点&#xff0c;有的能被抹平&#xff0c;有的不可能被抹平。 跨端&#xff0c;不是把web的习惯迁移到全平台。而是按照uni的写法&#xff0c;然后全平台使用。 按照uniapp规范开发可以保证多平台兼容&#xff0c;但每个平台有自己的一些特性。…

02、MySQL-------主从复制

目录 七、MySql主从复制启动主从复制&#xff1a;原理&#xff1a;实现&#xff1a;1、创建节点2、创建数据库3、主从配置1、主节点2、从节点 4、测试&#xff1a;5、问题&#xff1a;1、uuid修改2、service_id3、读写不同步方法1&#xff1a;方法2&#xff1a; 七、MySql主从复…

【VR】【Unity】如何调整Quest2的隐藏系统时间日期

【背景】 网络虽然OK&#xff0c;但是Oculus Quest要连上商店还必须调整好系统时间&#xff0c;不过在Quest系统中&#xff0c;时间对用户是不可见的&#xff0c;本篇介绍调整的方法。 【方法】 打开SideQuest&#xff0c;没有的话先去下载一个。打开后先登录&#xff0c;如…

该方法仅能传入 lambda 表达式产生的合成类

说明&#xff1a;使用Mybatis-plus查询记录时&#xff0c;出现下面的错误&#xff1b; org.apache.ibatis.builder.BuilderException: Error evaluating expression ew.sqlSegment ! null and ew.sqlSegment ! and ew.nonEmptyOfWhere. Cause: org.apache.ibatis.ognl.OgnlEx…

TikTok Shop美国本土店VS跨境店,如何选择?有何区别?

TikTok不仅仅是一个用于分享有趣短视频的平台&#xff0c;它也逐渐成为了商家们极力推广自己品牌和产品的场所。 在TikTok的商业生态系统中&#xff0c;存在几种不同的商店类型&#xff0c;各有其独特性和适用场景。今天&#xff0c;我们就来深入探讨这些店的差异与特点。 一、…

基于Python的车牌识别系统实现

目录 一、图像预处理 二、车牌区域定位 三、字符分割 四、字符识别 五、代码总结 随着人工智能和计算机视觉的不断发展&#xff0c;车牌识别系统成为了智能交通领域中的重要研究方向。Python作为一种流行的编程语言&#xff0c;具有易学易用、开发效率高等优点&#xff0c…

Unity 镜面反射

放置地板和模型 首先&#xff0c;让我们放置地板和将放置在其上的 3D 模型。这次&#xff0c;我使用 Plane 作为地板。从层次视图中选择“创建”→“3D 对象”→“平面”。我们还在地板上放置了 Unity-chan、Cube 和 Sphere。 接下来&#xff0c;创建地板的材质。在项目视图中…

01、MySQL-------性能优化

目录 一、影响性能的相关因素存储过程&#xff1a; 二、sql优化1>、Mysql系统架构2>、引擎区别&#xff1a; 3>、索引1、什么是索引&#xff1f;联合主键索引理解&#xff1a;索引长度理解&#xff1a;什么是慢查询&#xff1f; 1&#xff09;、索引理解2&#xff09;…

MSQL系列(六) Mysql实战-SQL语句优化

Mysql实战-SQL语句优化 前面我们讲解了索引的存储结构&#xff0c;BTree的索引结构&#xff0c;以及索引最左侧匹配原则&#xff0c;Explain的用法&#xff0c;可以看到是否使用了索引&#xff0c;今天我们讲解一下SQL语句的优化及如何优化 文章目录 Mysql实战-SQL语句优化1.…