玩转Python中的JSON:从基础到进阶

news2024/12/15 16:27:28

在Python中处理JSON数据是日常开发中的常见任务之一。JSON(JavaScript Object Notation)是一种轻量级的数据交换格式,在Web开发、数据存储等多个领域得到了广泛应用。本文将详细介绍如何在Python中处理JSON对象,包括基础操作、数据操作、高级操作、文件与目录操作、性能优化等内容,并通过具体的代码示例展示不同场景下的应用。

一、基础操作

1. 将Python对象转换为JSON字符串

在Python中,我们可以使用json模块将Python对象(如字典、列表等)转换为JSON格式字符串。此操作常用于将数据准备好传输到Web服务或保存为JSON文件。

import json
# Python字典
person = {
    'name': '刘杰',
    'age': 29,
    'city': '上海'
}
# 将Python字典转换为JSON字符串
json_string = json.dumps(person, ensure_ascii=False)
print("Python对象转换为JSON字符串:")
print(json_string)

在这段代码中,我们将一个名为person的字典转换为JSON字符串。ensure_ascii=False确保了非ASCII字符(如中文)能够正常显示。

2. 将JSON字符串解析为Python对象

解析JSON字符串为Python对象是常见的操作,特别是在处理从Web接口或文件中获取的JSON数据时。

# JSON字符串
json_string = '{"name": "陈辉", "age": 34, "city": "北京"}'
# 将JSON字符串解析为Python字典
data = json.loads(json_string)
print("JSON字符串解析为Python对象:")
print(data)

这段代码展示了如何将JSON字符串转换为Python字典对象,方便后续处理。

3. 将Python对象写入JSON文件

将Python对象保存为JSON文件,通常用于数据存储或共享。

# Python字典
person = {
    'name': '孙洋',
    'age': 25,
    'city': '成都'
}
# 将Python字典写入JSON文件
with open('person_data.json', 'w', encoding='utf-8') as f:
    json.dump(person, f, ensure_ascii=False)
print("已将Python对象写入JSON文件")

以上代码将一个字典写入到名为person_data.json的文件中。

4. 从JSON文件读取Python对象

读取存储在文件中的JSON数据,并将其解析为Python对象。

# 从JSON文件读取Python字典
with open('person_data.json', 'r', encoding='utf-8') as f:
    data = json.load(f)
print("已从JSON文件读取Python对象:")
print(data)

这段代码展示了如何读取一个JSON文件并将其解析为Python字典。

二、数据操作

5. 修改JSON文件中的数据

有时我们需要修改JSON文件中的数据。以下示例演示了如何读取文件、修改数据并将其写回文件。

# 从JSON文件读取Python字典
with open('person_data.json', 'r', encoding='utf-8') as f:
    data = json.load(f)
# 修改数据
data['age'] = 30
# 将修改后的数据写回JSON文件
with open('person_data.json', 'w', encoding='utf-8') as f:
    json.dump(data, f, ensure_ascii=False)
print("已修改JSON文件中的数据并保存")

6. 合并两个JSON文件

如果需要合并两个JSON文件的数据,可以先读取两个文件,然后将其内容合并,最后写入到一个新文件中。

# 读取第一个JSON文件
with open('file1.json', 'r', encoding='utf-8') as f:
    data1 = json.load(f)
# 读取第二个JSON文件
with open('file2.json', 'r', encoding='utf-8') as f:
    data2 = json.load(f)
# 合并两个字典
combined_data = {**data1, **data2}
# 将合并后的数据写入新的JSON文件
with open('combined_data.json', 'w', encoding='utf-8') as f:
    json.dump(combined_data, f, ensure_ascii=False)
print("已合并两个JSON文件并保存")

7. 添加新键值对

在现有的JSON数据中添加新的键值对。

# 从JSON文件读取Python字典
with open('person_data.json', 'r', encoding='utf-8') as f:
    data = json.load(f)
# 添加新键值对
data['job'] = '程序员'
# 将更新后的数据写回JSON文件
with open('person_data.json', 'w', encoding='utf-8') as f:
    json.dump(data, f, ensure_ascii=False)
print("已添加新键值对并保存")

8. 删除键值对

如果需要从JSON数据中删除某个键值对,可以使用del语句。

# 从JSON文件读取Python字典
with open('person_data.json', 'r', encoding='utf-8') as f:
    data = json.load(f)
# 删除键值对
del data['city']
# 将更新后的数据写回JSON文件
with open('person_data.json', 'w', encoding='utf-8') as f:
    json.dump(data, f, ensure_ascii=False)
print("已删除键值对并保存")

三、高级操作

9. 格式化输出JSON字符串

如果需要将JSON字符串以更易读的格式输出,可以使用indent参数来格式化输出。

# Python字典
person = {
    'name': '吴浩',
    'age': 24,
    'city': '厦门'
}
# 格式化输出JSON字符串
json_string = json.dumps(person, indent=4, ensure_ascii=False)
print("格式化输出JSON字符串:")
print(json_string)

10. 处理嵌套JSON结构

在JSON中,嵌套结构非常常见。我们可以处理这样的结构并将其转换为JSON字符串。

# 嵌套的Python字典
nested_person = {
    'name': '赵强',
    'details': {
        'age': 30,
        'city': '武汉'
    }
}
# 将嵌套的Python字典转换为JSON字符串
json_string = json.dumps(nested_person, ensure_ascii=False)
print("嵌套JSON结构转换为JSON字符串:")
print(json_string)

四、学后总结

在处理JSON数据时,Python的json模块提供了许多方便的功能,涵盖了从简单的对象转换到复杂嵌套结构的解析。通过本教程中的示例,你可以灵活地使用Python对JSON数据进行转换、存储、修改、合并等操作。

在处理json格式数据时要注意以下事项:

1. 在处理包含非ASCII字符(如中文)的JSON时,建议使用ensure_ascii=False,否则可能会遇到字符编码问题。

2. 当操作文件时,请确保文件路径正确,并在操作完成后及时关闭文件,避免文件损坏。

3. 在合并多个JSON文件时,确保数据结构一致,以避免数据覆盖或丢失。

4. 通过掌握这些技巧,你将能更高效地在Python项目中使用JSON数据进行各种操作。

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【实验】【H3CNE邓方鸣】交换机端口安全实验+2024.12.11

实验来源:邓方鸣交换机端口安全实验 软件下载: 华三虚拟实验室: 华三虚拟实验室下载 wireshark:wireshark SecureCRT v8.7 版本: CRT下载分享与破解 文章目录 dot1x 开启802.1X身份验证 开启802.1X身份验证,需要在系统视图和接口视…

qt 封装 调用 dll

这个目录下 ,第一个收藏的这个 ,可以用, 但是有几个地方要注意 第一.需要将dll的头文件添加到qt的文件夹里面 第二,需要在pro文件里面添加动态库路径 第三,如果调用dll失败,那么大概需要将dll文件放在e…

JS原型及原型链

欢迎来到“雪碧聊技术”CSDN博客! 在这里,您将踏入一个专注于Java开发技术的知识殿堂。无论您是Java编程的初学者,还是具有一定经验的开发者,相信我的博客都能为您提供宝贵的学习资源和实用技巧。作为您的技术向导,我将…

常见的汽车前灯方案

文章目录 1.前言2.前灯方案需求概述3.传统前灯方案3.1 方案描述3.2 常用芯片 4.智能前灯控制器方案4.1 方案描述4.2 常用芯片 5.投影灯方案5.1 DLP5.2 MicroLED模组5.2.1 方案描述5.2.2 常用芯片 1.前言 自从上次分享了汽车贯穿式尾灯之后,也有很多读者发私信咨询汽…

队列+宽搜_429. N 叉树的层序遍历_二叉树最大宽度

429. N 叉树的层序遍历 定义一个队列q,将一层的节点入队,并记录节点个数。根据节点的个数,出队列,并将其孩子入队列。出完队列,队列当前剩余节点的个数就是下次出队列的次数。直到队列为空 /* // Definition for a Nod…

深度剖析 ToF 技术:原理、优劣、数据纠错与工业应用全解析

1 引言 飞行时间(Time-of-Flight,简称ToF)技术是一种先进的三维成像技术,其工作机制与三维激光扫描技术有着相似之处。ToF技术的主要优势在于其能够一次性捕获整个场景的深度信息,而不是通过逐点扫描的方式来获取&…

嵌入式硬件-- 元器件焊接

1.锡膏的使用 锡膏要保存在冰箱里。 焊接排线端子;138度的低温锡(锡膏), 第一次使用,直接拿东西挑一点涂在引脚上,不知道多少合适,加热台加热到260左右,放在上面观察锡融化&#…

一区向量加权算法优化INFO-CNN-SVM卷积神经网络结合支持向量机多特征分类预测

一区向量加权算法优化INFO-CNN-SVM卷积神经网络结合支持向量机多特征分类预测 目录 一区向量加权算法优化INFO-CNN-SVM卷积神经网络结合支持向量机多特征分类预测分类效果基本描述程序设计参考资料 分类效果 基本描述 1.Matlab实现INFO-CNN-SVM向量加权算法优化卷积神经网络结…

给新ubuntu电脑配置远程控制环境和c++版本的opencv环境

目录 改用户密码安装ssh sever安装net-tools配置vscode安装vim配置C opencv1. 安装g, cmake, make2.安装opencv依赖库3.下载opencv源文件(1)方法一:官网下载(2)方法二:GitHub下载方式: 4. Cmake…

(3)spring security - 认识PasswordEncoder

目录 1.简介1.1.简单了解认证流程 2.密码验证3.PasswordEncoder的内置实现4.小结 目标: 简单了解认证的流程简单认识spring security中的Password Encoder 1.简介 还是以这幅图为基础,认识Password Encoder到底是什么? 1.1.简单了解认证流程…

29.在Vue 3中使用OpenLayers读取WKB数据并显示图形

在Web开发中,地理信息系统(GIS)应用越来越重要,尤其是在地图展示和空间数据分析的场景中。OpenLayers作为一个强大的开源JavaScript库,为开发者提供了丰富的地图展示和空间数据处理能力。在本篇文章中,我将…

LLM大语言模型私有化部署-OpenEuler22.03SP3上容器化部署Dify与Qwen2.5

背景 Dify 是一款开源的大语言模型(LLM) 应用开发平台。其直观的界面结合了 AI 工作流、 RAG 管道、 Agent 、模型管理、可观测性功能等,让您可以快速从原型到生产。相比 LangChain 这类有着锤子、钉子的工具箱开发库, Dify 提供了更接近生产需要的完整…

革新3D高保真数字人生成:无需深度摄像头,普通手机视频即可创建逼真面部动画

在数字化内容创作领域,特别是虚拟人物和增强现实(AR)应用中,高质量的3D数字人生成正变得越来越重要。然而,传统方法依赖于昂贵的深度摄像头和复杂的设备设置,这不仅增加了成本,也限制了其灵活性和易用性。为了解决这些问题,并降低进入门槛,一款基于MetaHuman的插件应运…

【前端 Uniapp】使用Vant打造Uniapp项目(避坑版)

一、基本介绍 Uniapp 是基于 Vue.js 的开发框架,通过一套代码可以同时发布到多个平台的应用框架。而 Vant 是针对移动端 Vue.js 的组件库。通过这样的组合,我们可以快速构建出一个跨平台的移动应用。Vant 已经支持多种小程序和 H5 平台,也对…

【记录】Django解决与VUE跨域问题

1 梗概 这里记录Django与VUE的跨域问题解决方法,主要修改内容是在 Django 中。当然其他的前端项目 Django 也可以这样处理。 2 安装辅助包 pip install django-cors-headers3 配置 settings.py INSTALLED_APPS [ # ... corsheaders, # ... ] 为了响应…

【AI知识】激活函数介绍(sigmoid Tanh Relu)+ 梯度爆炸 / 消失及解决办法

激活函数: 使用激活函数的原因: 神经网络中每一层的输入输出都是一个线性求和的过程,下一层的输出只是承接了上一层输入函数的线性变换,如果没有激活函数,无论构造的神经网络多么复杂,有多少层,…

驱动开发-入门【1】

1.内核下载地址 Linux内核源码的官方网站为https://www.kernel.org/,可以在该网站下载最新的Linux内核源码。进入该网站之后如下图所示: 从上图可以看到多个版本的内核分支,分别为主线版本(mainline)、稳定版本&#…

3D 生成重建038-DiffGS训练一个3DGS编码器来简化训练

3D 生成重建038-DiffGS训练一个3DGS编码器来简化训练 文章目录 0 论文工作1 论文方法2 实验结果 0 论文工作 三维高斯溅射(3DGS)在渲染速度和保真度方面表现出了令人信服的性能,但由于其离散性和非结构性,高斯溅射的生成仍然是一…

【渗透测试一】信息收集

信息收集简介 定义 信息收集是渗透测试和网络安全评估等活动的初始关键阶段。它是指通过各种合法手段(如网络扫描、查询公开数据库、社会工程学等),收集与目标系统(包括网络、主机、应用程序、组织等)相关的信息&…

小迪笔记第五十一天-前后台功能点文件下载文件读取文件删除目录遍历目录穿越

前言 前后台功能点 就是因为权限的不同而造成的 功能的不同 一般这个文件的 下载 文件的读取 一般出现在前台 而人家的删除和遍历 目录的穿越出现在 后台 以这个海洋cms 为例进行 演示 (源码在后台) 后台管理地址:http://192.168…