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中的数据对象,是单引号。然后也变成了中文。

相关文章:
Python学习基础笔记七十七——json序列化
客户端和服务端之间需要交换数据才能完成各种功能。 假设 服务端程序都是用Python语言开发的话,那么 服务端从数据库中获取的最近的交易列表,可能就是像下面这样的一个Python列表对象: historyTransactions [{time : 20170101070311, #…...
【C++】C++11新特性
文章目录 一、C发展简介二、C11简介三、列表初始化1.统一使用{}初始化2.initializer_list类 四、变量的类型推导1.auto2.decltype3.nullptr 五、范围for循环六、STL中一些变化七、final与override八、新的类功能1.新增默认成员函数2.成员变量的缺省值3.default 和 delete4.fina…...
使用 PyAudio、语音识别、pyttsx3 和 SerpApi 构建简单的基于 CLI 的语音助手
德米特里祖布☀️ 一、介绍 正如您从标题中看到的,这是一个演示项目,显示了一个非常基本的语音助手脚本,可以根据 Google 搜索结果在终端中回答您的问题。 您可以在 GitHub 存储库中找到完整代码:dimitryzub/serpapi-demo-project…...
C++11——多线程
目录 一.thread类的简单介绍 二.线程函数参数 三.原子性操作库(atomic) 四.lock_guard与unique_lock 1.lock_guard 2.unique_lock 五.条件变量 一.thread类的简单介绍 在C11之前,涉及到多线程问题,都是和平台相关的,比如windows和linu…...
力扣每日一题48:旋转图像
题目描述: 给定一个 n n 的二维矩阵 matrix 表示一个图像。请你将图像顺时针旋转 90 度。 你必须在 原地 旋转图像,这意味着你需要直接修改输入的二维矩阵。请不要 使用另一个矩阵来旋转图像。 示例 1: 输入:matrix [[1,2,3],…...
操作系统——吸烟者问题(王道视频p34、课本ch6)
1.问题分析:这个问题可以看作是 可以生产多种产品的 单生产者-多消费者问题 2.代码——这里就是由于同步信号量的初值都是1,所以没有使用mutex互斥信号, 总共4个同步信号量,其中一个是 finish信号量...
通讯协议学习之路:CAN协议理论
通讯协议之路主要分为两部分,第一部分从理论上面讲解各类协议的通讯原理以及通讯格式,第二部分从具体运用上讲解各类通讯协议的具体应用方法。 后续文章会同时发表在个人博客(jason1016.club)、CSDN;视频会发布在bilibili(UID:399951374) 序、…...
Redis常用配置详解
目录 一、Redis查看当前配置命令二、Redis基本配置三、RDB全量持久化配置(默认开启)四、AOF增量持久化配置五、Redis key过期监听配置六、Redis内存淘汰策略七、总结 一、Redis查看当前配置命令 # Redis查看当前全部配置信息 127.0.0.1:6379> CONFIG…...
卷积神经网络CNN学习笔记-MaxPool2D函数解析
目录 1.函数签名:2.学习中的疑问3.代码 1.函数签名: torch.nn.MaxPool2d(kernel_size, strideNone, padding0, dilation1, return_indicesFalse, ceil_modeFalse) 2.学习中的疑问 Q:使用MaxPool2D池化时,当卷积核移动到某位置,该卷积核覆盖区域超过了输入尺寸时,MaxPool2D会…...
基于图像字典学习的去噪技术研究与实践
图像去噪是计算机视觉领域的一个重要研究方向,其目标是从受到噪声干扰的图像中恢复出干净的原始图像。字典学习是一种常用的图像去噪方法,它通过学习图像的稀疏表示字典,从而实现对图像的去噪处理。本文将详细介绍基于字典学习的图像去噪技术…...
记一次Clickhouse 复制表同步延迟排查
现象 数据从集群中一个节点写入之后,其他两个节点无法及时查询到数据,等了几分钟。因为我们ck集群是读写分离架构,也就是一个节点写数据,其他节点供读取。 排查思路 从业务得知,数据更新时间点为:11:30。…...
Maven的详细安装步骤说明
Step 1: 下载Maven 首先,您需要从Maven官方网站(https://maven.apache.org/)下载Maven的最新版本。在下载页面上,找到与您操作系统对应的二进制文件(通常是.zip或.tar.gz格式),下载到本地。 St…...
金融机器学习方法:K-均值算法
目录 1.算法介绍 2.算法原理 3.python实现示例 1.算法介绍 K均值聚类算法是机器学习和数据分析中常用的无监督学习方法之一,主要用于数据的分类。它的目标是将数据划分为几个独特的、互不重叠的子集或“集群”,以使得同一集群内的数据点彼此相似&…...
移远通信携手MIKROE推出搭载LC29H系列模组的Click boards开发板,为物联网应用带来高精定位服务
近日,移远通信与MikroElektronika(以下简称“MIKROE”)展开合作,基于移远LC29H系列模组推出了多款支持实时动态载波相位差分技术(RTK)和惯性导航(DR)技术的Click Boards™ 开发板&am…...
Spring Cloud 之 Sentinel简介与GATEWAY整合实现
简介 随着微服务的流行,服务和服务之间的稳定性变得越来越重要。Sentinel 是面向分布式服务架构的流量控制组件,主要以流量为切入点,从限流、流量整形、熔断降级、系统负载保护、热点防护等多个维度来帮助开发者保障微服务的稳定性。 熔断 …...
搭建网站七牛云CDN加速配置
打开七牛云后台;添加域名; 添加需要加速的域名,比如我添加的是motoshare.cn 源站配置,这里要用IP地址,访问的目录下面要有能访问测试的文件,尽量不要用源站域名,这个只能用加速二级域名&#x…...
算法|每日一题|做菜顺序|贪心
1402. 做菜顺序 原题地址: 力扣每日一题:做菜顺序 一个厨师收集了他 n 道菜的满意程度 satisfaction ,这个厨师做出每道菜的时间都是 1 单位时间。 一道菜的 「 like-time 系数 」定义为烹饪这道菜结束的时间(包含之前每道菜所花…...
json-server工具准备后端接口服务环境
1.安装全局工具json-server(全局工具仅需要安装一次) 官网:json-server - npm 点击Getting started可以查看使用方法 在终端中输入yarn global add json-server或npm i json-server -g 如果输入json-server -v报错 再输入npm install -g j…...
文心一言 VS 讯飞星火 VS chatgpt (118)-- 算法导论10.3 3题
三、用go语言,在ALLOCATE-OBJECT和 FREE-OBJECT过程的实现中,为什么不需要设置或重置对象的 prev 属性呢? 文心一言: 在 Go 语言中,ALLOCATE-OBJECT 和 FREE-OBJECT 过程的实现通常不需要显式地设置或重置对象的 prev 属性。这…...
numpy矩阵画框框
在n>5(n是奇数)的nn数组中,用*画外方框和内接菱形。 (本笔记适合熟悉numpy的coder翻阅) 【学习的细节是欢悦的历程】 Python 官网:https://www.python.org/ Free:大咖免费“圣经”教程《 python 完全自学教程》,不仅仅是基础那…...
别再让串口打印卡住你的STM32了!用FreeRTOS队列+环形缓冲区实现丝滑异步日志
STM32异步日志系统实战:FreeRTOS队列与环形缓冲区的完美结合 调试嵌入式系统时,串口打印是最常用的手段之一。但传统的同步打印方式往往会成为系统性能的瓶颈,特别是在实时性要求高的应用中。想象一下,当你正在调试一个电机控制系…...
Xbox Game Pass存档提取终极指南:3分钟实现游戏进度无损迁移
Xbox Game Pass存档提取终极指南:3分钟实现游戏进度无损迁移 【免费下载链接】XGP-save-extractor Python script to extract savefiles out of Xbox Game Pass for PC games 项目地址: https://gitcode.com/gh_mirrors/xg/XGP-save-extractor 还在为Xbox Ga…...
COCO数据集实战:从API安装到PyTorch数据加载器构建全解析
1. COCO数据集与pycocotools全景解读 当你第一次接触计算机视觉项目时,可能会被各种数据集搞得眼花缭乱。COCO(Common Objects in Context)数据集绝对是这个领域无法绕开的里程碑,它就像视觉界的"百科全书",…...
如何快速解锁微信网页版?终极解决方案让你告别“无法登录“困扰
如何快速解锁微信网页版?终极解决方案让你告别"无法登录"困扰 【免费下载链接】wechat-need-web 让微信网页版可用 / Allow the use of WeChat via webpage access 项目地址: https://gitcode.com/gh_mirrors/we/wechat-need-web 还在为微信网页版…...
SITS2026闭门报告首度公开:自然语言转代码在金融/医疗/嵌入式三大高危场景的11项合规性断点(含GDPR与ISO/IEC 23894适配路径)
第一章:SITS2026闭门报告核心结论与行业影响 2026奇点智能技术大会(https://ml-summit.org) SITS2026闭门报告首次系统披露了大模型推理基础设施在超低延迟场景下的结构性瓶颈,指出当前主流服务框架中约68%的端到端延迟源于KV缓存跨设备同步开销&#…...
用超运算统一些常见的运算
Hn(a,b)H_n(a,b)Hn(a,b) 递归定义如下: Hn(a,b){b1n0,an1, b0,1n≥2, b0,Hn−1(a, Hn(a,b−1))n≥1, b≥1. H_n(a, b) \begin{cases} b 1 & n 0, \\ a & n 1,\; b 0, \\ 1 & n \ge 2,\; b 0, \\ H_{n-1}\big(a,\;H_n(a, b-1)\big) …...
MSPM0 BSL烧录避坑指南:从CCS生成TI-TXT Hex到UniFlash成功下载的全流程解析
MSPM0 BSL烧录避坑指南:从CCS生成TI-TXT Hex到UniFlash成功下载的全流程解析 如果你正在使用MSPM0系列单片机,并且希望通过串口进行BSL(Bootloader)模式下的程序烧录,那么这篇文章将为你提供一份详尽的避坑指南。不同于…...
Bitbucket代码仓库全流程指南:从创建到分支管理与忽略文件配置
1. Bitbucket项目创建与权限配置 第一次接触Bitbucket团队协作时,项目创建往往需要管理员权限。这里有个小技巧:如果你所在团队使用企业邮箱域(比如company.com),通常可以直接用公司邮箱申请项目创建权限。我遇到过不少…...
3分钟快速安装Figma中文界面插件:设计师必备的免费汉化工具
3分钟快速安装Figma中文界面插件:设计师必备的免费汉化工具 【免费下载链接】figmaCN 中文 Figma 插件,设计师人工翻译校验 项目地址: https://gitcode.com/gh_mirrors/fi/figmaCN 你是否因为Figma的英文界面而感到困扰?专业术语看不懂…...
千问3.5-2B图文理解实操手册:清晰图/模糊图/反光图/低对比度图四类适配策略
千问3.5-2B图文理解实操手册:清晰图/模糊图/反光图/低对比度图四类适配策略 1. 模型能力概述 千问3.5-2B是Qwen系列中的小型视觉语言模型,专为图片理解与文本生成任务设计。这个开箱即用的解决方案已经完成本地部署,无需额外安装依赖&#…...
