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 完全自学教程》,不仅仅是基础那…...

通过Wrangler CLI在worker中创建数据库和表
官方使用文档:Getting started Cloudflare D1 docs 创建数据库 在命令行中执行完成之后,会在本地和远程创建数据库: npx wranglerlatest d1 create prod-d1-tutorial 在cf中就可以看到数据库: 现在,您的Cloudfla…...
多场景 OkHttpClient 管理器 - Android 网络通信解决方案
下面是一个完整的 Android 实现,展示如何创建和管理多个 OkHttpClient 实例,分别用于长连接、普通 HTTP 请求和文件下载场景。 <?xml version"1.0" encoding"utf-8"?> <LinearLayout xmlns:android"http://schemas…...

Python爬虫(一):爬虫伪装
一、网站防爬机制概述 在当今互联网环境中,具有一定规模或盈利性质的网站几乎都实施了各种防爬措施。这些措施主要分为两大类: 身份验证机制:直接将未经授权的爬虫阻挡在外反爬技术体系:通过各种技术手段增加爬虫获取数据的难度…...

HBuilderX安装(uni-app和小程序开发)
下载HBuilderX 访问官方网站:https://www.dcloud.io/hbuilderx.html 根据您的操作系统选择合适版本: Windows版(推荐下载标准版) Windows系统安装步骤 运行安装程序: 双击下载的.exe安装文件 如果出现安全提示&…...
什么?连接服务器也能可视化显示界面?:基于X11 Forwarding + CentOS + MobaXterm实战指南
文章目录 什么是X11?环境准备实战步骤1️⃣ 服务器端配置(CentOS)2️⃣ 客户端配置(MobaXterm)3️⃣ 验证X11 Forwarding4️⃣ 运行自定义GUI程序(Python示例)5️⃣ 成功效果
使用Spring AI和MCP协议构建图片搜索服务
目录 使用Spring AI和MCP协议构建图片搜索服务 引言 技术栈概览 项目架构设计 架构图 服务端开发 1. 创建Spring Boot项目 2. 实现图片搜索工具 3. 配置传输模式 Stdio模式(本地调用) SSE模式(远程调用) 4. 注册工具提…...

uniapp 开发ios, xcode 提交app store connect 和 testflight内测
uniapp 中配置 配置manifest 文档:manifest.json 应用配置 | uni-app官网 hbuilderx中本地打包 下载IOS最新SDK 开发环境 | uni小程序SDK hbulderx 版本号:4.66 对应的sdk版本 4.66 两者必须一致 本地打包的资源导入到SDK 导入资源 | uni小程序SDK …...

【MATLAB代码】基于最大相关熵准则(MCC)的三维鲁棒卡尔曼滤波算法(MCC-KF),附源代码|订阅专栏后可直接查看
文章所述的代码实现了基于最大相关熵准则(MCC)的三维鲁棒卡尔曼滤波算法(MCC-KF),针对传感器观测数据中存在的脉冲型异常噪声问题,通过非线性加权机制提升滤波器的抗干扰能力。代码通过对比传统KF与MCC-KF在含异常值场景下的表现,验证了后者在状态估计鲁棒性方面的显著优…...
深度剖析 DeepSeek 开源模型部署与应用:策略、权衡与未来走向
在人工智能技术呈指数级发展的当下,大模型已然成为推动各行业变革的核心驱动力。DeepSeek 开源模型以其卓越的性能和灵活的开源特性,吸引了众多企业与开发者的目光。如何高效且合理地部署与运用 DeepSeek 模型,成为释放其巨大潜力的关键所在&…...

Axure 下拉框联动
实现选省、选完省之后选对应省份下的市区...