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

JSON 处理笔记

🧠 JSON 处理笔记(Python)


一、什么是 JSON?

JSON(JavaScript Object Notation) 是一种轻量级的数据格式,广泛用于:

  • 网络数据通信(前后端接口)
  • 配置文件(如 .json 文件)
  • 数据存储(如数据库字段)

它和 Python 的 dict/list 数据结构非常相似。


二、Python 中处理 JSON 的标准库

Python 提供了内置模块:json,无需安装即可使用。

python复制编辑
import json

三、常用方法汇总(🔥重点)

功能方法示例
Python 对象 ➜ JSON 字符串json.dumps(obj)序列化为字符串
JSON 字符串 ➜ Python 对象json.loads(s)反序列化为 dict 或 list
Python 对象 ➜ 直接写入 JSON 文件json.dump(obj, file)推荐用于保存 JSON 文件
JSON 文件 ➜ 读取成 Python 对象json.load(file)读取本地 JSON 文件并转为对象

四、参数详解(常用)

json.dumps() / json.dump() 常用参数:

参数名作用示例
ensure_ascii=False保证中文不被转义成 \uXXXX正确保存中文
indent=2缩进美化,生成带换行的 JSON便于阅读
separators=(',', ': ')控制键值之间的空格精简或格式化

五、刚才的处理过程详解

🧩 原始问题

你有一个字符串形式的 JSON(比如从网页提取):

python复制编辑
json_str = '{\n  "中华人民共和国劳动法 第一条": "……", ... }'

✅ 步骤 1:反序列化字符串成 dict

python复制编辑
article_dict = json.loads(json_str)
  • json.loads() 把 JSON 格式的字符串转成 Python 的字典对象。
  • 此时你可以用 article_dict['中华人民共和国劳动法 第一条'] 正常取值。

✅ 步骤 2:为了生成 JSON 数组形式的结构,加一个列表封装

python复制编辑
article_list = [article_dict]

变成:

python复制编辑[{"中华人民共和国劳动法 第一条": "……"}
]

✅ 步骤 3:写入 JSON 文件(自动换行、支持中文)

python复制编辑with open(save_path, "w", encoding="utf-8") as f:json.dump(article_list, f, ensure_ascii=False, indent=2)
  • json.dump():直接将 Python 对象写入文件。
  • ensure_ascii=False:避免中文被转成 Unicode(\u4e2d\u56fd...
  • indent=2:加缩进,自动换行,美化结构

六、额外:文件读写常见操作

1. 读取 .json 文件

python复制编辑with open("data.json", "r", encoding="utf-8") as f:data = json.load(f)

2. 写入 .json 文件(推荐)

python复制编辑with open("output.json", "w", encoding="utf-8") as f:json.dump(data, f, ensure_ascii=False, indent=2)

七、常见错误提醒 ⚠️

错误原因解决
TypeError: Object of type X is not JSON serializable你试图写入的数据中包含不支持的类型,如 datetime、set 等转成字符串或基本类型
json.decoder.JSONDecodeError字符串不是合法 JSON 格式(可能用单引号或漏了逗号)检查 JSON 字符串结构

✅ 总结一句话:

在 Python 中,用 json.loads() 把 JSON 字符串变成对象,用 json.dumps()json.dump() 把对象变成 JSON 字符串或文件,配合 ensure_ascii=Falseindent=2 可以完美处理中文与格式化。

相关文章:

  • 接上篇,解决FramePack启动报错:“httpx.ReadError: [WinError 10054] 远程主机强迫关闭了一个现有的连接。“的问题
  • 在c++中,char定义的变量取地址时,为什么会输出 “烫烫烫...“?
  • 【在Spring Boot中集成Redis】
  • LeetCode - 1137.第N个泰波那契数
  • 学习黑客色即是空
  • python使用cv2在图片上标点
  • 二、shell脚本--变量与数据类型
  • c++_2011 NOIP 普及组 (1)
  • WebSocket分布式实现方案
  • 【LLaMA-Factory实战】1.3命令行深度操作:YAML配置与多GPU训练全解析
  • 数据库 1.0
  • wpf CommandParameter 传递MouseWheelEventArgs参数 ,用 MvvmLight 实现
  • 里氏替换原则(LSP)
  • Java 网络安全新技术:构建面向未来的防御体系
  • 强化学习--2.数学
  • 【Java学习】通配符?
  • 内存性能测试方法
  • 如何通过文理工三类AI助理赋能HI,从而,颠覆“隔行如隔山”的旧观念和“十万小时定律”的成长限制
  • 穿越数据森林与网络迷宫:树与图上动态规划实战指南
  • 【CF】Day50——Codeforces Round 960 (Div. 2) BCD
  • 央行行长:债券市场“科技板”准备工作基本就绪,目前近百家市场机构计划发行超三千亿科技创新债
  • 关税风暴下,3G资本拟94亿美元私有化美国鞋履巨头斯凯奇,溢价30%
  • 这个接班巴菲特的男人,说不出一个打动人心的故事
  • 无人机穿越大理崇圣寺千年古塔时“炸机”,当地:肇事者已找到,将被追责
  • 美政府称不再对哈佛大学提供联邦资助
  • 市场监管总局发布《城镇房屋租赁合同(示范文本)》