Python Json格式数据处理
示例:查看和编辑 JSON 文件的 Python 程序
import json
from pprint import pprintdef load_json(file_path):"""加载并解析 JSON 文件。:param file_path: JSON 文件路径:return: 解析后的 JSON 对象(字典或列表)"""try:with open(file_path, 'r', encoding='utf-8') as f:data = json.load(f)return dataexcept Exception as e:print(f"Error loading JSON file: {e}")return Nonedef save_json(file_path, data):"""将 JSON 对象保存到文件中。:param file_path: JSON 文件路径:param data: 要保存的 JSON 对象(字典或列表)"""try:with open(file_path, 'w', encoding='utf-8') as f:json.dump(data, f, ensure_ascii=False, indent=4)print(f"JSON file saved successfully to {file_path}")except Exception as e:print(f"Error saving JSON file: {e}")def edit_json(data):"""编辑 JSON 数据。:param data: JSON 对象(字典或列表):return: 编辑后的 JSON 对象"""pprint(data) # 打印当前数据结构while True:key_or_index = input("Enter the key/index you want to edit (or type 'done' to finish editing): ").strip()if key_or_index.lower() == 'done':breakif isinstance(data, dict):if key_or_index in data:value = input(f"Enter new value for '{key_or_index}': ")try:# Try to convert the input string to appropriate data typevalue = json.loads(value)except json.JSONDecodeError:pass # If it's not valid JSON, keep it as a stringdata[key_or_index] = valueelse:print(f"Key '{key_or_index}' not found.")elif isinstance(data, list):try:index = int(key_or_index)if 0 <= index < len(data):value = input(f"Enter new value for index [{index}]: ")try:# Try to convert the input string to appropriate data typevalue = json.loads(value)except json.JSONDecodeError:pass # If it's not valid JSON, keep it as a stringdata[index] = valueelse:print(f"Index '{index}' out of range.")except ValueError:print("Invalid index. Please enter a number.")pprint(data) # 打印更新后的数据结构return dataif __name__ == '__main__':file_path = 'example.json' # 替换为你的 JSON 文件路径# 加载 JSON 文件data = load_json(file_path)if data is None:exit(1)# 编辑 JSON 数据edited_data = edit_json(data)# 保存修改后的 JSON 文件save_json(file_path, edited_data)
使用说明
-
加载 JSON 文件:
- 将你想要查看和编辑的 JSON 文件路径赋值给
file_path
变量。 - 运行程序,它会读取并打印出 JSON 文件的内容。
- 将你想要查看和编辑的 JSON 文件路径赋值给
-
编辑 JSON 数据:
- 根据提示输入你要编辑的键(如果是字典)或索引(如果是列表),然后输入新的值。
- 如果你想结束编辑,请输入
done
。
-
保存 JSON 文件:
- 编辑完成后,程序会自动将更改保存回原始文件中。
示例 JSON 文件 (example.json
)
为了演示这个程序的功能,这里提供一个简单的 JSON 文件内容示例:
{"name": "Alice","age": 30,"is_student": false,"courses": ["Math", "Physics"],"address": {"street": "123 Main St","city": "Wonderland"}
}
当你运行上述 Python 程序,并按照提示进行操作时,你可以查看这个 JSON 文件的内容,并对其进行编辑,比如修改 name
的值、添加新的课程到 courses
列表中,或者更改 address
下的信息等。最后,所有的更改都会被保存回到 example.json
文件中。
如果出现Error loading JSON file: Extra data: line 2 column 1 (char 4530)怎么办?
出现 Error loading JSON file: Extra data: line 2 column 1 (char 4530)
错误提示,通常意味着在解析 JSON 文件时遇到了多余的、未预期的数据。这可能是由于以下几种原因之一:
-
文件格式不正确:JSON 文件中可能包含了多于一个顶级对象或数组,或者有额外的字符(如注释、多余的逗号等)。
-
文件编码问题:如果文件包含非 UTF-8 编码的字符,可能会导致解析失败。
-
文件损坏:文件传输过程中可能出现错误,导致文件内容被破坏。
-
多余数据:文件中存在超出最后一个有效 JSON 对象之后的数据。
解决方法
1. 检查 JSON 文件格式
确保 JSON 文件只包含单个有效的 JSON 对象或数组。可以使用在线 JSON 验证工具(如 jsonlint.com)来检查和格式化 JSON 文件,以确定是否有格式上的错误。
2. 移除多余的数据
如果你确实需要存储多个 JSON 对象,考虑将它们放入一个数组中,或者每个对象保存为单独的文件。例如:
[{"name": "Alice", "age": 30},{"name": "Bob", "age": 25}
]
而不是:
{"name": "Alice", "age": 30}
{"name": "Bob", "age": 25} // 这会导致 'Extra data' 错误
3. 检查文件编码
确保你的 JSON 文件是以 UTF-8 编码保存的,并且没有 BOM(字节顺序标记)。你可以使用文本编辑器(如 Notepad++ 或 VSCode)来更改文件编码。
4. 确认文件完整性
确保文件没有损坏,可以通过重新下载或生成文件来验证这一点。如果你是从网络上获取的文件,请尝试再次获取以确保完整性。
5. 修改 Python 代码以处理多个 JSON 对象
如果你必须处理包含多个独立 JSON 对象的文件,可以逐行读取文件并解析每一行作为单独的 JSON 对象。下面是一个示例代码片段:
import jsondef load_multiple_json_objects(file_path):"""从文件中加载多个 JSON 对象。:param file_path: 包含多个 JSON 对象的文件路径:return: 包含所有解析后的 JSON 对象的列表"""objects = []with open(file_path, 'r', encoding='utf-8') as f:for line in f:try:obj = json.loads(line.strip())objects.append(obj)except json.JSONDecodeError as e:print(f"Error decoding JSON object: {e}")continuereturn objects# 使用上述函数加载多个 JSON 对象
file_path = 'example.json'
objects = load_multiple_json_objects(file_path)
for obj in objects:pprint(obj)
这种方法假设每个 JSON 对象占一行,你可以解析出来然后按照标准的json格式存储。如果不是这种情况,你可能需要更复杂的逻辑来分割和解析文件内容。
相关文章:
Python Json格式数据处理
示例:查看和编辑 JSON 文件的 Python 程序 import json from pprint import pprintdef load_json(file_path):"""加载并解析 JSON 文件。:param file_path: JSON 文件路径:return: 解析后的 JSON 对象(字典或列表)"&quo…...
【声音场景分类--论文阅读】
1.基于小波时频图特征在声音场景分类 基于小波时频图特征在声音场景分类任务中的表现 2.增强增强高效音频分类网络 https://arxiv.org/pdf/2204.11479v5 https://github.com/Alibaba-MIIL/AudioClassfication 音频分类网络如图4所示。在此阶段,主要重点是建立一…...
Web前端界面开发
前沿:介绍自适应和响应式布局 自适应布局:-----针对页面1个像素的变换而变化 就是我们上一个练习的效果 我们的页面效果,随着我们的屏幕大小而发生适配的效果(类似等比例) 如:rem适配 和 vw/vh适配 …...
模式识别与机器学习
文章目录 考试题型零、简介1.自学内容(1)机器学习(2)机器学习和统计学中常见的流程(3)导数 vs 梯度(4)KL散度(5)凸优化问题 2.基本概念3.典型的机器学习系统4.前沿研究方向举例 一、逻辑回归1.线性回归2.逻辑回归3.随堂练习 二、贝叶斯学习基础1.贝叶斯公式2.贝叶斯决策3.分类器…...
eNSP之家----ACL实验入门实例详解(Access Control List访问控制列表)(重要重要重要的事说三遍)
ACL实验(Access Control List访问控制列表)是一种基于包过滤的访问控制技术,它可以根据设定的条件对接口上的数据包进行过滤,允许其通过或丢弃。访问控制列表被广泛地应用于路由器和三层交换机。 准备工作 在eNSP里面部署设备&a…...
STM32 I2C硬件配置库函数
单片机学习! 目录 前言 一、I2C_DeInit函数 二、I2C_Init函数 三、I2C_StructInit函数 四、I2C_Cmd函数 五、I2C_GenerateSTART函数 六、I2C_GenerateSTOP函数 七、I2C_AcknowledgeConfig函数 八、I2C_SendData函数 九、I2C_ReceiveData函数 十、I2C_Sen…...
特制一个自己的UI库,只用CSS、图标、emoji图 第二版
图: 代码: index.html <!DOCTYPE html> <html lang"zh-CN"> <head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0"><title>M…...
Hologres 介绍
Hologres 是 阿里云 提供的一款 实时数据分析平台,它结合了数据仓库(Data Warehouse)和流式计算(Stream Processing)的优势,专为大规模数据分析和实时数据处理而设计。Hologres 基于 PostgreSQL 构建&#…...
oracle闪回表
文章目录 闪回表案例1:(未清理回收站时的闪回表--成功)案例2(清理回收站时的闪回表--失败)案例3:彻底删除表(不经过回收站--失败)案例4:闪回表之后重新命名新表总结1、删…...
蓝桥与力扣刷题(283 移动零)
题目:给定一个数组 nums,编写一个函数将所有 0 移动到数组的末尾,同时保持非零元素的相对顺序。 请注意 ,必须在不复制数组的情况下原地对数组进行操作。 示例 1: 输入: nums [0,1,0,3,12] 输出: [1,3,12,0,0]示例 2: 输入: …...
每日学习30分轻松掌握CursorAI:Cursor AI自然语言编程入门
Cursor AI自然语言编程入门 1. 自然语言编程概述 自然语言编程是一种革命性的编程方式,让开发者能够使用日常语言描述需求,由AI将其转换为可执行的代码。让我们通过系统化的学习来掌握这项技能。 2. 自然语言编程基础 2.1 工作原理流程图 2.2 指令模…...
Ubuntu22.04 离线安装:gcc、make、dkms、build-essential
挂载启动U盘 查看U盘对应的设备名称 sudo fdisk -l 1 # 以下就是需要挂载的U盘 Disk /dev/sdc: 14.9 GiB, 15938355200 bytes, 31129600 sectors Units: sectors of 1 * 512 512 bytes Sector size (logical/physical): 512 bytes / 512 bytes I/O size (minimum/optimal): …...
【竞技宝】CS2:HLTV2024选手排名TOP4-NiKo
北京时间2025年1月11日,HLTV年度选手排名正在持续公布中,今日凌晨正式公布了今年的TOP4选手为G2(目前已转为至Falcons)战队的NiKo。 选手简介 NiKo是一名来自波黑的CS职业选手,现年26岁。作为DOTA2饱负盛名的职业选手,NiKo在CS1.6时代就已经开始征战职业赛场。2012年,年仅15岁…...
Kali系统(Debian 10.3) 遇到的问题
目录 问题一:非问题 kali 基础官网与安装 问题二: 问题三: Kali系统 MySQL问题Cant connect to local MySQL server through socket /run/mysqld/mysqld.sock (2) 问题四:重新安装MySQL 也就是MariaDB(MariaDB 含 MySQL相关…...
【2025最新计算机毕业设计】基于SpringBoot+Vue奶茶点单系统(高质量源码,提供文档,免费部署到本地)
作者简介:✌CSDN新星计划导师、Java领域优质创作者、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和学生毕业项目实战,高校老师/讲师/同行前辈交流。✌ 主要内容:🌟Java项目、Python项目、前端项目、PHP、ASP.NET、人工智能…...
洛谷 P1873 [COCI 2011/2012 #5] EKO / 砍树 c语言
题目: P1873 [COCI 2011/2012 #5] EKO / 砍树 - 洛谷 | 计算机科学教育新生态 题目描述 伐木工人 Mirko 需要砍 M 米长的木材。对 Mirko 来说这是很简单的工作,因为他有一个漂亮的新伐木机,可以如野火一般砍伐森林。不过,Mirko…...
【神经网络中的激活函数如何选择?】
在神经网络中,激活函数的选择对于模型的性能和学习效率至关重要。以下是一些关于如何选择激活函数的建议: 一、隐藏层中的激活函数选择 ReLU及其变体: ReLU(Rectified Linear Unit,修正线性单元)ÿ…...
服务器多节点 Grafana、Prometheus 和 Node-Exporter Docker版本部署指南
要在多台服务器上部署 Grafana、Prometheus 和 Node-Exporter,并且其中一台服务器专门用于 Grafana 和 Prometheus 的部署 1. 准备工作 服务器信息: Server 1:用于部署 Grafana 和 Prometheus。 Server 2-n:用于部署 Node-Export…...
<C++学习>C++ Boost 算法集合操作教程
C Boost 算法集合操作教程 Boost 提供了一些非常强大的算法库,用于对集合进行高效的操作。这些集合算法库主要提供了便捷的接口,支持常见的集合运算(如并集、交集、差集等)、排列组合和更高级的容器操作。 1. Boost 算法库简介 …...
Jaeger UI使用、采集应用API排除特定路径
Jaeger使用 注: Jaeger服务端版本为:jaegertracing/all-in-one-1.6.0 OpenTracing版本为:0.33.0,最后一个版本,停留在May 06, 2019。最好升级到OpenTelemetry。 Jaeger客户端版本为:jaeger-client-1.3.2。…...
设计一个利用事务特性可以阻塞线程的排他锁,并且通过注解和 AOP 来实现
设计思路: 利用数据库表记录锁标识:通过唯一标识符(如方法名 参数),我们可以在数据库中插入一条记录,表示当前方法正在执行。这条记录需要记录插入时间。 注解:通过注解标识哪些方法需要加锁&a…...
【2024年华为OD机试】 (A卷,100分)- 对称美学(Java JS PythonC/C++)
一、问题描述 题目描述 对称就是最大的美学,现有一道关于对称字符串的美学。已知: 第1个字符串:R第2个字符串:BR第3个字符串:RBBR第4个字符串:BRRBRBBR第5个字符串:RBBRBRRBBRRBRBBR 相信你…...
【教程】数据可视化处理之2024年各省GDP排名预测!
过去的一年里,我国的综合实力显著提升,在新能源汽车、新一代战机、两栖攻击舰、航空航天、芯片电子、装备制造等领域位居全球前列。虽然全国各省市全年的经济数据公布还需要一段时间,但各地的工业发展数据,财政收入数据已大概揭晓…...
Java 将RTF文档转换为Word、PDF、HTML、图片
RTF文档因其跨平台兼容性而广泛使用,但有时在不同的应用场景可能需要特定的文档格式。例如,Word文档适合编辑和协作,PDF文档适合打印和分发,HTML文档适合在线展示,图片格式则适合社交媒体分享。因此我们可能会需要将RT…...
深度学习的原理和应用
一、深度学习的原理 深度学习是机器学习领域的一个重要分支,其原理基于多层神经网络结构和优化算法。以下是深度学习的核心原理: 多层神经网络结构:深度学习模型通常由多层神经元组成,这些神经元通过权重和偏置相互连接。输入数据…...
CAPL语法基础
CAPL语法基础 目录 CAPL语法基础1. 引言2. 数据类型、变量与常量2.1 数据类型2.2 变量2.3 常量2.4 案例1:使用变量和常量计算圆的面积 3. 运算符与表达式3.1 算术运算符3.2 关系运算符3.3 逻辑运算符3.4 位运算符3.5 案例2:使用运算符实现简单的逻辑判断…...
安卓studio生成apk步骤
在写完app之后虽然能在真机上运行 但是在文件夹中找不到相应的apk ,注意!!!安卓 studio中可以自动生动生成 apk 下面是生成步骤: 步骤1:build ->make project 步骤2:build ->Generate si…...
Azure主机windows2008就地升级十步
Azure上云主机的windows2008系统需要进行就地升级。 按着微软的升级路径:win2008-->win2012-->win2016-->win2022 第一步:创建快照备份,防止升级失败第二步:升级托管磁盘,在VM管理的地方将磁盘升级成托管磁盘…...
解锁 C# 与 LiteDB 嵌入式 NoSQL 数据库
一、开篇:邂逅 C# 与 LiteDB 新世界 在当今的软件开发领域,数据管理如同建筑的基石,而选择一款合适的数据库则是项目成功与否的关键因素之一。对于 C# 开发者来说,面对琳琅满目的数据库选项,如何抉择常常令人头疼。今…...
7 分布式定时任务调度框架
先简单介绍下分布式定时任务调度框架的使用场景和功能和架构,然后再介绍世面上常见的产品 我们在大型的复杂的系统下,会有大量的跑批,定时任务的功能,如果在独立的子项目中单独去处理这些任务,随着业务的复杂度的提高…...
wordpress高亮代码/seo内部优化具体做什么
自定义的DataSet要加 [Serializable]标记。...
高端网站建设与管理/网络营销师证书含金量
小吴同学,能不能更新快一点!!!感谢各位还未取消关注,确实是工作忙的慌,只有晚上可以总结写点东西,还望大家继续支持。今天分享的是关于720全景图制作的方法,现在市场上其实有很多设备…...
什么查网站是否降权/矿产网站建设价格
从写第一篇今日头条高仿系列开始,到现在已经过去了1个多月了,其实大体都做好了,就是迟迟没有放出来,因为我觉得,做这个东西也是有个过程的,我想把这个模仿中一步一步学习的过程,按照自己的思路写…...
网站备案链接直接查看/全球搜索网站排名
JsDoc 如果你在写javascript,是否羡慕过C,JAVA的文档自动生成工具?是否希望自己的程序也能自动生成一份对应的文档,犹如java API文档一样呢?不要再羡慕了。jsdoc_toolkit.zip 一款强大的js doc生成工具已经能完成你所羡…...
政府网站 banner 源码/附近的电脑培训班在哪里
继承 继承是什么? 继承是c的三大特性之一继承。 那么继承有什么作用? 继承可以提高我们代码的复用性。既然是复用,简单来说就是重复利用。 再举一个重复利用的例子ctrlc,ctrlv,也是重复利用,其实复用你…...
网站设计网页主页介绍/独立站建站平台
JSON.stringify() 转JSON字符串 JSON.parse() 转JSON对象...