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

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)

使用说明

  1. 加载 JSON 文件

    • 将你想要查看和编辑的 JSON 文件路径赋值给 file_path 变量。
    • 运行程序,它会读取并打印出 JSON 文件的内容。
  2. 编辑 JSON 数据

    • 根据提示输入你要编辑的键(如果是字典)或索引(如果是列表),然后输入新的值。
    • 如果你想结束编辑,请输入 done
  3. 保存 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 文件时遇到了多余的、未预期的数据。这可能是由于以下几种原因之一:

  1. 文件格式不正确:JSON 文件中可能包含了多于一个顶级对象或数组,或者有额外的字符(如注释、多余的逗号等)。

  2. 文件编码问题:如果文件包含非 UTF-8 编码的字符,可能会导致解析失败。

  3. 文件损坏:文件传输过程中可能出现错误,导致文件内容被破坏。

  4. 多余数据:文件中存在超出最后一个有效 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格式存储。如果不是这种情况,你可能需要更复杂的逻辑来分割和解析文件内容。

http://www.lryc.cn/news/519302.html

相关文章:

  • 【声音场景分类--论文阅读】
  • Web前端界面开发
  • 模式识别与机器学习
  • eNSP之家----ACL实验入门实例详解(Access Control List访问控制列表)(重要重要重要的事说三遍)
  • STM32 I2C硬件配置库函数
  • 特制一个自己的UI库,只用CSS、图标、emoji图 第二版
  • Hologres 介绍
  • oracle闪回表
  • 蓝桥与力扣刷题(283 移动零)
  • 每日学习30分轻松掌握CursorAI:Cursor AI自然语言编程入门
  • Ubuntu22.04 离线安装:gcc、make、dkms、build-essential
  • 【竞技宝】CS2:HLTV2024选手排名TOP4-NiKo
  • Kali系统(Debian 10.3) 遇到的问题
  • 【2025最新计算机毕业设计】基于SpringBoot+Vue奶茶点单系统(高质量源码,提供文档,免费部署到本地)
  • 洛谷 P1873 [COCI 2011/2012 #5] EKO / 砍树 c语言
  • 【神经网络中的激活函数如何选择?】
  • 服务器多节点 Grafana、Prometheus 和 Node-Exporter Docker版本部署指南
  • <C++学习>C++ Boost 算法集合操作教程
  • Jaeger UI使用、采集应用API排除特定路径
  • 设计一个利用事务特性可以阻塞线程的排他锁,并且通过注解和 AOP 来实现
  • 【2024年华为OD机试】 (A卷,100分)- 对称美学(Java JS PythonC/C++)
  • 【教程】数据可视化处理之2024年各省GDP排名预测!
  • Java 将RTF文档转换为Word、PDF、HTML、图片
  • 深度学习的原理和应用
  • CAPL语法基础
  • 安卓studio生成apk步骤
  • Azure主机windows2008就地升级十步
  • 解锁 C# 与 LiteDB 嵌入式 NoSQL 数据库
  • 7 分布式定时任务调度框架
  • 七星棋类游戏源码:两百玩法开源修复