当前位置: 首页 > news >正文

Python 中的 JSON 操作:简单、高效的数据交换格式

在现代的数据交换和存储中,JSON(JavaScript Object Notation)作为一种轻量级的数据交换格式,备受青睐。它不仅易于阅读和理解,还可以灵活地表达和存储高维数据。本文将介绍如何在 Python 中操作 JSON 文件,实现数据的序列化和反序列化。

★2022年程序员考试题库-程序员笔试题库-程序员题库大全 - 无忧考网

 

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 操作:简单、高效的数据交换格式

在现代的数据交换和存储中&#xff0c;JSON&#xff08;JavaScript Object Notation&#xff09;作为一种轻量级的数据交换格式&#xff0c;备受青睐。它不仅易于阅读和理解&#xff0c;还可以灵活地表达和存储高维数据。本文将介绍如何在 Python 中操作 JSON 文件&#xff0c;…...

IT行业面试攻略:技巧与心态的平衡

引言&#xff1a;在面试IT公司时&#xff0c;调整好心态是取得优秀表现的关键。面试心态直接影响着我们在面试中的自信程度和表现。面对这一挑战&#xff0c;我们需要学会积极自信、认识到紧张是正常的、进行充分准备以及以积极的心态去迎接面试。只有在拥有正确的心态下&#…...

【玩转Linux】标准io缓冲区的操作

(꒪ꇴ꒪ ),hello我是祐言博客主页&#xff1a;C语言基础,Linux基础,软件配置领域博主&#x1f30d;快上&#x1f698;&#xff0c;一起学习&#xff01;送给读者的一句鸡汤&#x1f914;&#xff1a;集中起来的意志可以击穿顽石!作者水平很有限&#xff0c;如果发现错误&#x…...

28.JavaWeb-Elasticsearch

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

Python Flask构建微信小程序订餐系统 (十)

🔥 编辑会员信息 🔥 编辑会员信息可以通过点击会员列表操作,也可以点击会员信息详情点击进行操作 🔥 修改编程会员信息列表布局 🔥 修改 web/templates/member/index.html 文件,添加跳转到编辑会员信息的页面 web/templates/member/set.html 🔥 创建用于会员…...

j2ee相关知识点

浏览器栏中&#xff0c;输入的是servlet的mapping映射&#xff0c;请求到servlet中去&#xff0c;jsp路径&#xff0c;会跳转到对应的页面 Servlet接口位于最顶端&#xff0c;GenericServlet实现了Servlet&#xff0c;HttpServlet继承了GenericServlet 浏览器中访问Servlet映…...

Shell脚本学习-eval内置命令

这个命令&#xff0c;平时接触不是很多&#xff0c;所以不知道是什么回事。 eval内置命令&#xff1a; 功能&#xff1a;当Shell程序执行到eval语句的时候&#xff0c;Shell读入参数args&#xff0c;并将它们组合成一个新的命令&#xff0c;然后执行。也就是重新运算求出参数的…...

word中将合并后的多行拆分为原先的行数

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

网络知识点之-BGP协议

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

【mac系统】mac系统调整妙控鼠标速度

当下环境&#xff1a; mac系统版本&#xff0c;其他系统应该也可以&#xff0c;大家可以自行试下&#xff1a; 鼠标 mac妙控鼠标&#xff0c;型号A1657 问题描述&#xff1a; 通过mac系统自带的鼠标速度调节按钮&#xff0c;调到最大后还是感觉移动速度哦过慢 问题解决&…...

AI > 语音识别开源项目列举

名称所属开发机构使用场景优缺点技术特点占有率描述CMU Sphinx卡内基梅隆大学嵌入式设备、服务器应用优点&#xff1a;可用于嵌入式设备和服务器应用。 缺点&#xff1a;准确率相对较低&#xff0c;适用范围有限。- 支持多种语言模型和工具。- 适用于嵌入式设备和服务器应用。中…...

golang单元测试及mock总结

文章目录 一、前言1、单测的定位2、vscode中生成单测 二、构造测试case的注意事项1、项目初始化2、构造空interface{}3、构造结构体的time.Time类型4、构造json格式的test case 三、运行单测文件1、整体运行单测文件2、运行单个单测文件报错&#xff08;1&#xff09;command-l…...

mysql中的‘\G’ ‘\g’ ‘;’ navicat dbeaver

省流&#xff1a; 在navicat、dbeaver等客户端中使用时&#xff0c;“\G”、“\g”、“;”都可以不需要。 “\G”、“\g”、“;”都是用来做sql的结束符用。“\g”、“;”作用完全等价。“\G”是将字段横排显示转换成纵列显示。 横排显示&#xff1a; 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中用于获取字符串长度的函数。它接受一个字符串作为参数&#xff0c;并返回该字符串的字符数量&#xff08;包括空格和特殊字符&#xff09;。 用法: 以下是length函数的语法&#xff1a; length(string)其中&#xff0c;string是要计算长度的字符串…...

「深度学习之优化算法」(十七)灰狼算法

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

mysql主从复制(主-从-从)

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

如何制定数据采集解决方案?

数据采集仍是人工智能&#xff08;AI&#xff09;构建团队的主要瓶颈。原因各不相同&#xff1a;用例数据可能不足&#xff0c;深度学习等新机器学习&#xff08;ML&#xff09;技术需要更多数据&#xff0c;或者团队并未建立获取所需数据的适当流程。但无论如何&#xff0c;对…...

RabbitMQ消息可靠性问题及解决

说明&#xff1a;在RabbitMQ消息传递过程中&#xff0c;有以下问题&#xff1a; 消息没发到交换机 消息没发到队列 MQ宕机&#xff0c;消息在队列中丢失 消息者接收到消息后&#xff0c;未能正常消费&#xff08;程序报错&#xff09;&#xff0c;此时消息已在队列中移除 …...

2023河南萌新联赛第(三)场:郑州大学(两个题目)

1.入门mex 重点 一些数字的mex是从0往上枚举&#xff0c;第一个没出现的数字。请你回答选最多k个数字&#xff0c;mex最大是多少 既然从0开始枚举&#xff0c;那么应该是最小&#xff0c;那么最大是什么&#xff1f; 经过自己的考虑&#xff0c;给出一个样例&#xff0c;0 1 1…...

利用ngx_stream_return_module构建简易 TCP/UDP 响应网关

一、模块概述 ngx_stream_return_module 提供了一个极简的指令&#xff1a; return <value>;在收到客户端连接后&#xff0c;立即将 <value> 写回并关闭连接。<value> 支持内嵌文本和内置变量&#xff08;如 $time_iso8601、$remote_addr 等&#xff09;&a…...

<6>-MySQL表的增删查改

目录 一&#xff0c;create&#xff08;创建表&#xff09; 二&#xff0c;retrieve&#xff08;查询表&#xff09; 1&#xff0c;select列 2&#xff0c;where条件 三&#xff0c;update&#xff08;更新表&#xff09; 四&#xff0c;delete&#xff08;删除表&#xf…...

Mybatis逆向工程,动态创建实体类、条件扩展类、Mapper接口、Mapper.xml映射文件

今天呢&#xff0c;博主的学习进度也是步入了Java Mybatis 框架&#xff0c;目前正在逐步杨帆旗航。 那么接下来就给大家出一期有关 Mybatis 逆向工程的教学&#xff0c;希望能对大家有所帮助&#xff0c;也特别欢迎大家指点不足之处&#xff0c;小生很乐意接受正确的建议&…...

ffmpeg(四):滤镜命令

FFmpeg 的滤镜命令是用于音视频处理中的强大工具&#xff0c;可以完成剪裁、缩放、加水印、调色、合成、旋转、模糊、叠加字幕等复杂的操作。其核心语法格式一般如下&#xff1a; ffmpeg -i input.mp4 -vf "滤镜参数" output.mp4或者带音频滤镜&#xff1a; ffmpeg…...

c#开发AI模型对话

AI模型 前面已经介绍了一般AI模型本地部署&#xff0c;直接调用现成的模型数据。这里主要讲述讲接口集成到我们自己的程序中使用方式。 微软提供了ML.NET来开发和使用AI模型&#xff0c;但是目前国内可能使用不多&#xff0c;至少实践例子很少看见。开发训练模型就不介绍了&am…...

代理篇12|深入理解 Vite中的Proxy接口代理配置

在前端开发中,常常会遇到 跨域请求接口 的情况。为了解决这个问题,Vite 和 Webpack 都提供了 proxy 代理功能,用于将本地开发请求转发到后端服务器。 什么是代理(proxy)? 代理是在开发过程中,前端项目通过开发服务器,将指定的请求“转发”到真实的后端服务器,从而绕…...

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…...

重启Eureka集群中的节点,对已经注册的服务有什么影响

先看答案&#xff0c;如果正确地操作&#xff0c;重启Eureka集群中的节点&#xff0c;对已经注册的服务影响非常小&#xff0c;甚至可以做到无感知。 但如果操作不当&#xff0c;可能会引发短暂的服务发现问题。 下面我们从Eureka的核心工作原理来详细分析这个问题。 Eureka的…...

智能AI电话机器人系统的识别能力现状与发展水平

一、引言 随着人工智能技术的飞速发展&#xff0c;AI电话机器人系统已经从简单的自动应答工具演变为具备复杂交互能力的智能助手。这类系统结合了语音识别、自然语言处理、情感计算和机器学习等多项前沿技术&#xff0c;在客户服务、营销推广、信息查询等领域发挥着越来越重要…...

C#学习第29天:表达式树(Expression Trees)

目录 什么是表达式树&#xff1f; 核心概念 1.表达式树的构建 2. 表达式树与Lambda表达式 3.解析和访问表达式树 4.动态条件查询 表达式树的优势 1.动态构建查询 2.LINQ 提供程序支持&#xff1a; 3.性能优化 4.元数据处理 5.代码转换和重写 适用场景 代码复杂性…...