Python 中的 JSON 操作:简单、高效的数据交换格式
在现代的数据交换和存储中,JSON(JavaScript Object Notation)作为一种轻量级的数据交换格式,备受青睐。它不仅易于阅读和理解,还可以灵活地表达和存储高维数据。本文将介绍如何在 Python 中操作 JSON 文件,实现数据的序列化和反序列化。
1. JSON 数据格式
JSON 格式采用键值对的方式表达信息。它的值可以是对象、数组、字符串、整数、浮点数、布尔型或空值。下面是一个 JSON 数据的例子:
{"name": "kira","age": 18,"hobby": ["唱歌", "吹牛"],"friends": [{"name": "刘德华"},{"name": "梁朝伟"}]
}
在实际工作中,我们可以根据需要扩展和定制这种数据格式,以适应不同的场景和业务需求。
2. Python 操作 JSON 文件
Python 提供了内置的 json
模块,用于解析和操作 JSON 数据。
2.1 JSON 反序列化为 Python 对象
将 JSON 数据反序列化为 Python 对象是常见的操作,可以利用 json.loads()
方法实现。
import jsonjson_str = '{"name":"kira","age":18}'
print(json_str, type(json_str))load_data = json.loads(json_str)
print(load_data, type(load_data))
运行结果:
{"name":"kira","age":18} <class 'str'>
{'name': 'kira', 'age': 18} <class 'dict'>
此外,如果需要从 JSON 文件中加载数据,可以使用 json.load()
方法。
import jsonwith open('kira.json', 'r', encoding='utf-8') as f:load_data = json.load(f)print(load_data, type(load_data))
运行结果:
{'name': 'kira', 'age': 18, 'hobby': ['唱歌', '吹牛'], 'friends': [{'name': '刘德华'}, {'name': '梁朝伟'}]} <class 'dict'>
2.2 Python 序列化为 JSON
与反序列化相对应,Python 可以将对象序列化为 JSON 数据。json.dumps()
方法可以实现这一功能。
import jsondata = {"name": "kira","age": 18,"hobby": ["唱歌", "吹牛"],"friends": [{"name": "刘德华"},{"name": "梁朝伟"}]
}
json_str = json.dumps(data)
print(json_str)print(json.dumps(data, ensure_ascii=False))
print(json.dumps(data, ensure_ascii=False, indent=4))
print(json.dumps(data, ensure_ascii=False, indent=4, sort_keys=True))
运行结果:
{"name": "kira", "age": 18, "hobby": ["\u5531\u6b4c", "\u5439\u725b"], "friends": [{"name": "\u5218\u5fb7\u534e"}, {"name": "\u6881\u671d\u4f1f"}]}
{"name": "kira", "age": 18, "hobby": ["唱歌", "吹牛"], "friends": [{"name": "刘德华"}, {"name": "梁朝伟"}]}
{"name": "kira","age": 18,"hobby": ["唱歌","吹牛"],"friends": [{"name": "刘德华"},{"name": "梁朝伟"}]
}
{"age": 18,"friends": [{"name": "刘德华"},{"name": "梁朝伟"}],"hobby": ["唱歌","吹牛"],"name": "kira"
}
如果需要将 Python 对象序列化后写入 JSON 文件,可以使用 json.dump()
方法。
import jsondata = {"name": "kira","age": 18,"hobby": ["唱歌", "吹牛"],"friends": [{"name": "刘德华"},{"name": "梁朝伟"}]
}with open('first.json', 'w', encoding='utf-8') as f:json.dump(data, f, ensure_ascii=False, indent=4)
通过上述方法,我们可以轻松地在 Python 中进行 JSON 数据的序列化和反序列化操作。无论是数据交换还是数据存储,JSON 都是一种简单而高效的选择。在实际工作中,我们可以根据具体需求灵活运用 JSON 的优势,提高工作效率。
3 工作中的常见场景
3.1 网络请求和响应
在web开发中,客户端和服务器之间得数据传输通常使用JSON格式。客户端可以将数据封装成 JSON 字符串,通过网络请求发送给服务器。服务器接收到 JSON 数据后,可以使用 Python 中的 JSON 模块将其反序列化为 Python 对象进行处理。处理完成后,服务器可以将结果序列化为 JSON 数据,发送给客户端作为响应。例如:
服务器端(Python):
from flask import Flask, jsonify, requestapp = Flask(__name__)@app.route('/api/data', methods=['POST'])
def receive_data():data = request.get_json()# 对接收到的数据进行处理processed_data = process_data(data)# 将处理后的数据作为 JSON 响应返回给客户端return jsonify(processed_data)def process_data(data):# 在这里进行数据处理的逻辑# ...return processed_dataif __name__ == '__main__':app.run()
客户端(JavaScript):
const data = {name: '测试玩家勇哥',age: 18,hobby: ['唱歌', '吹牛'],
};fetch('/api/data', {method: 'POST',headers: {'Content-Type': 'application/json',},body: JSON.stringify(data),
}).then(response => response.json()).then(responseData => {// 处理从服务器返回的响应数据console.log(responseData);});
上述就是客户端语服务器端之间使用JSON数据传输交互的常见场景。
3.2 配置文件管理
JSON 格式数据非常适合用于存储和管理配置文件,当然数据文件的使用之前勇哥有一篇文章详细介绍过,忘记了的小伙伴可以去复习一下,传送门:,下面举个荔枝:
读取配置文件:
import jsondef read_config_file(file_path):with open(file_path, 'r') as f:config_data = json.load(f)return config_data# 读取配置文件
config = read_config_file('config.json')# 获取配置项的值
db_host = config['database']['host']
db_port = config['database']['port']
修改配置文件:
import jsondef update_config_file(file_path, new_config):with open(file_path, 'w') as f:json.dump(new_config, f, indent=4)# 读取配置文件
config = read_config_file('config.json')# 修改配置项的值
config['database']['port'] = 5432# 更新配置文件
update_config_file('config.json', config)
数据持久化存储也是可以写道JSON文件中的,本文就不做过多的描写了。
最后
为了回馈铁杆粉丝们,我给大家整理了完整的软件测试视频学习教程,朋友们如果需要可以自行免费领取 【保证100%免费】
软件测试面试文档
我们学习必然是为了找到高薪的工作,下面这些面试题是来自阿里、腾讯、字节等一线互联网大厂最新的面试资料,并且有字节大佬给出了权威的解答,刷完这一套面试资料相信大家都能找到满意的工作。
资料获取方式:
相关文章:

Python 中的 JSON 操作:简单、高效的数据交换格式
在现代的数据交换和存储中,JSON(JavaScript Object Notation)作为一种轻量级的数据交换格式,备受青睐。它不仅易于阅读和理解,还可以灵活地表达和存储高维数据。本文将介绍如何在 Python 中操作 JSON 文件,…...
IT行业面试攻略:技巧与心态的平衡
引言:在面试IT公司时,调整好心态是取得优秀表现的关键。面试心态直接影响着我们在面试中的自信程度和表现。面对这一挑战,我们需要学会积极自信、认识到紧张是正常的、进行充分准备以及以积极的心态去迎接面试。只有在拥有正确的心态下&#…...

【玩转Linux】标准io缓冲区的操作
(꒪ꇴ꒪ ),hello我是祐言博客主页:C语言基础,Linux基础,软件配置领域博主🌍快上🚘,一起学习!送给读者的一句鸡汤🤔:集中起来的意志可以击穿顽石!作者水平很有限,如果发现错误&#x…...

28.JavaWeb-Elasticsearch
1.Elasticsearch概述 Elasticsearch 是一个分布式的全文检索引擎。采用Java语言开发,基于Apache协议的开源项目,具有实时搜索,稳定,可靠,快速的特点。 1.1 全文检索引擎 分为通用搜索引擎(百度、谷歌&…...

Python Flask构建微信小程序订餐系统 (十)
🔥 编辑会员信息 🔥 编辑会员信息可以通过点击会员列表操作,也可以点击会员信息详情点击进行操作 🔥 修改编程会员信息列表布局 🔥 修改 web/templates/member/index.html 文件,添加跳转到编辑会员信息的页面 web/templates/member/set.html 🔥 创建用于会员…...
j2ee相关知识点
浏览器栏中,输入的是servlet的mapping映射,请求到servlet中去,jsp路径,会跳转到对应的页面 Servlet接口位于最顶端,GenericServlet实现了Servlet,HttpServlet继承了GenericServlet 浏览器中访问Servlet映…...
Shell脚本学习-eval内置命令
这个命令,平时接触不是很多,所以不知道是什么回事。 eval内置命令: 功能:当Shell程序执行到eval语句的时候,Shell读入参数args,并将它们组合成一个新的命令,然后执行。也就是重新运算求出参数的…...

word中将合并后的多行拆分为原先的行数
word中将已经合并的多行拆分为原先的行数,我们不用刻意去数应该是多少行, 只需将拆分的行数不断增加,word会默认最大增加到合并前的行数。...

网络知识点之-BGP协议
本文章收录至《网络》专栏,点击右上角专栏图标可访问本专栏! 边界网关协议(BGP)是运行于 TCP 上的一种自治系统的路由协议。 BGP 是唯一一个用来处理像因特网大小的网络的协议,也是唯一能够妥善处理好不相关路由域间的…...

【mac系统】mac系统调整妙控鼠标速度
当下环境: mac系统版本,其他系统应该也可以,大家可以自行试下: 鼠标 mac妙控鼠标,型号A1657 问题描述: 通过mac系统自带的鼠标速度调节按钮,调到最大后还是感觉移动速度哦过慢 问题解决&…...
AI > 语音识别开源项目列举
名称所属开发机构使用场景优缺点技术特点占有率描述CMU Sphinx卡内基梅隆大学嵌入式设备、服务器应用优点:可用于嵌入式设备和服务器应用。 缺点:准确率相对较低,适用范围有限。- 支持多种语言模型和工具。- 适用于嵌入式设备和服务器应用。中…...

golang单元测试及mock总结
文章目录 一、前言1、单测的定位2、vscode中生成单测 二、构造测试case的注意事项1、项目初始化2、构造空interface{}3、构造结构体的time.Time类型4、构造json格式的test case 三、运行单测文件1、整体运行单测文件2、运行单个单测文件报错(1)command-l…...
mysql中的‘\G’ ‘\g’ ‘;’ navicat dbeaver
省流: 在navicat、dbeaver等客户端中使用时,“\G”、“\g”、“;”都可以不需要。 “\G”、“\g”、“;”都是用来做sql的结束符用。“\g”、“;”作用完全等价。“\G”是将字段横排显示转换成纵列显示。 横排显示: id |e…...
驱动day4work
头文件 #ifndef __CKR_H__ #define __CKR_H__typedef struct {unsigned int MODER; // 00unsigned int OTYPER; // 04unsigned int OSPEEDR; // 08unsigned int PUPDR; // 0Cunsigned int IDR; // 10unsigned int ODR; // 14 } gpio_t;// GPIO口 #define PHY_GPI…...
[SQL挖掘机] - 字符串函数 - length
介绍: length函数是mysql中用于获取字符串长度的函数。它接受一个字符串作为参数,并返回该字符串的字符数量(包括空格和特殊字符)。 用法: 以下是length函数的语法: length(string)其中,string是要计算长度的字符串…...

「深度学习之优化算法」(十七)灰狼算法
1. 灰狼算法简介 (以下描述,均不是学术用语,仅供大家快乐的阅读) 灰狼算法(Grey Wolf Algorithm)是受灰狼群体捕猎行为启发而提出的算法。算法提出于2013年,仍是一个较新的算法。目前为止(2020)与之相关的论文也比较多,但多为算法的应用,应该仍有研究和改进的余…...

mysql主从复制(主-从-从)
文章目录 一、前期环境准备二、主库配置1.设置server-id值并开启binlog参数2.建立同步账户并给上权限3.查看主库状态4.锁表设置只读5.备份数据库数据 三、从库配置1.设置server-id值并开启binlog参数2.还原从主库备份数据3.设定从主库同步4.启动从库同步开关 四.测试1.在主库上…...

如何制定数据采集解决方案?
数据采集仍是人工智能(AI)构建团队的主要瓶颈。原因各不相同:用例数据可能不足,深度学习等新机器学习(ML)技术需要更多数据,或者团队并未建立获取所需数据的适当流程。但无论如何,对…...

RabbitMQ消息可靠性问题及解决
说明:在RabbitMQ消息传递过程中,有以下问题: 消息没发到交换机 消息没发到队列 MQ宕机,消息在队列中丢失 消息者接收到消息后,未能正常消费(程序报错),此时消息已在队列中移除 …...

2023河南萌新联赛第(三)场:郑州大学(两个题目)
1.入门mex 重点 一些数字的mex是从0往上枚举,第一个没出现的数字。请你回答选最多k个数字,mex最大是多少 既然从0开始枚举,那么应该是最小,那么最大是什么? 经过自己的考虑,给出一个样例,0 1 1…...
SkyWalking 10.2.0 SWCK 配置过程
SkyWalking 10.2.0 & SWCK 配置过程 skywalking oap-server & ui 使用Docker安装在K8S集群以外,K8S集群中的微服务使用initContainer按命名空间将skywalking-java-agent注入到业务容器中。 SWCK有整套的解决方案,全安装在K8S群集中。 具体可参…...
Java 8 Stream API 入门到实践详解
一、告别 for 循环! 传统痛点: Java 8 之前,集合操作离不开冗长的 for 循环和匿名类。例如,过滤列表中的偶数: List<Integer> list Arrays.asList(1, 2, 3, 4, 5); List<Integer> evens new ArrayList…...

MFC内存泄露
1、泄露代码示例 void X::SetApplicationBtn() {CMFCRibbonApplicationButton* pBtn GetApplicationButton();// 获取 Ribbon Bar 指针// 创建自定义按钮CCustomRibbonAppButton* pCustomButton new CCustomRibbonAppButton();pCustomButton->SetImage(IDB_BITMAP_Jdp26)…...
多场景 OkHttpClient 管理器 - Android 网络通信解决方案
下面是一个完整的 Android 实现,展示如何创建和管理多个 OkHttpClient 实例,分别用于长连接、普通 HTTP 请求和文件下载场景。 <?xml version"1.0" encoding"utf-8"?> <LinearLayout xmlns:android"http://schemas…...
【位运算】消失的两个数字(hard)
消失的两个数字(hard) 题⽬描述:解法(位运算):Java 算法代码:更简便代码 题⽬链接:⾯试题 17.19. 消失的两个数字 题⽬描述: 给定⼀个数组,包含从 1 到 N 所有…...

(二)原型模式
原型的功能是将一个已经存在的对象作为源目标,其余对象都是通过这个源目标创建。发挥复制的作用就是原型模式的核心思想。 一、源型模式的定义 原型模式是指第二次创建对象可以通过复制已经存在的原型对象来实现,忽略对象创建过程中的其它细节。 📌 核心特点: 避免重复初…...
Qwen3-Embedding-0.6B深度解析:多语言语义检索的轻量级利器
第一章 引言:语义表示的新时代挑战与Qwen3的破局之路 1.1 文本嵌入的核心价值与技术演进 在人工智能领域,文本嵌入技术如同连接自然语言与机器理解的“神经突触”——它将人类语言转化为计算机可计算的语义向量,支撑着搜索引擎、推荐系统、…...

【配置 YOLOX 用于按目录分类的图片数据集】
现在的图标点选越来越多,如何一步解决,采用 YOLOX 目标检测模式则可以轻松解决 要在 YOLOX 中使用按目录分类的图片数据集(每个目录代表一个类别,目录下是该类别的所有图片),你需要进行以下配置步骤&#x…...

C# 求圆面积的程序(Program to find area of a circle)
给定半径r,求圆的面积。圆的面积应精确到小数点后5位。 例子: 输入:r 5 输出:78.53982 解释:由于面积 PI * r * r 3.14159265358979323846 * 5 * 5 78.53982,因为我们只保留小数点后 5 位数字。 输…...
rnn判断string中第一次出现a的下标
# coding:utf8 import torch import torch.nn as nn import numpy as np import random import json""" 基于pytorch的网络编写 实现一个RNN网络完成多分类任务 判断字符 a 第一次出现在字符串中的位置 """class TorchModel(nn.Module):def __in…...