Python中的JSON处理(标准库)

一、什么是JSON?

JSON(JavaScript Object Notation)是一种基于文本的开放标准,用于表示结构化数据。它采用键值对的形式组织数据,支持以下基本数据类型:

  • 字符串(string)
  • 数字(number)
  • 布尔值(true / false)
  • 空值(null)
  • 对象(object,即键值对集合)
  • 数组(array,即有序列表)

例如,一个简单的 JSON 数据如下:

{ "name": "张三", "age": 25, "is_student": true, "hobbies": ["读书", "游泳"], "address": null }

二、Python中的json模块

Python 的标准库json提供了将 Python 对象序列化为 JSON 字符串,以及将 JSON 字符串反序列化为 Python 对象的功能。该模块无需安装,直接导入即可使用:

import json

主要函数

函数功能
json.dumps(obj)将 Python 对象转换为 JSON 字符串
json.loads(s)将 JSON 字符串解析为 Python 对象
json.dump(obj, file)将 Python 对象写入文件(以 JSON 格式)
json.load(file)从文件读取 JSON 数据并解析为 Python 对象

三、数据类型映射关系

Python 与 JSON 在数据类型上存在一定的映射关系:

Python 类型JSON 类型
dictobject
list,tuplearray
strstring
int,floatnumber
Truetrue
Falsefalse
Nonenull

注意:Python 中的tuple会被转换为 JSON 的array,但反向解析时会变成list


四、基本用法示例

1. 序列化:Python对象 → JSON字符串(dumps)

import json data = { "name": "李四", "age": 30, "is_employee": True, "skills": ["Python", "Django", "Flask"], "address": None } # 转换为JSON字符串 json_str = json.dumps(data, ensure_ascii=False, indent=2) print(json_str)

输出结果:

{ "name": "李四", "age": 30, "is_employee": true, "skills": [ "Python", "Django", "Flask" ], "address": null }

参数说明:

  • ensure_ascii=False:允许非ASCII字符(如中文)正常显示,否则会转义。
  • indent=2:美化输出,使用2个空格缩进,便于阅读。

2. 反序列化:JSON字符串 → Python对象(loads)

json_string = ''' { "title": "Python入门教程", "pages": 256, "available": true, "tags": ["编程", "学习"] } ''' data = json.loads(json_string) print(type(data)) # <class 'dict'> print(data['title']) # Python入门教程

3. 写入JSON文件(dump)

with open('data.json', 'w', encoding='utf-8') as f: json.dump(data, f, ensure_ascii=False, indent=4)

这会将data对象写入名为data.json的文件中,并以 UTF-8 编码保存,支持中文。


4. 读取JSON文件(load)

with open('data.json', 'r', encoding='utf-8') as f: loaded_data = json.load(f) print(loaded_data)

五、常见问题与注意事项

1. 处理中文乱码

默认情况下,json.dumps()会将非 ASCII 字符转义(如\u4e2d\u6587),需设置ensure_ascii=False才能正确显示中文。

2. 自定义对象无法直接序列化

Python 中自定义类的对象不能直接被json序列化。例如:

class Person: def __init__(self, name, age): self.name = name self.age = age p = Person("王五", 28) # json.dumps(p) # 报错:Object of type Person is not JSON serializable

解决方法:提供自定义的序列化函数或继承JSONEncoder

方法一:使用default参数
def person_serializer(obj): if isinstance(obj, Person): return {'name': obj.name, 'age': obj.age} raise TypeError(f"Object of type {type(obj)} is not JSON serializable") json_str = json.dumps(p, default=person_serializer, ensure_ascii=False, indent=2) print(json_str)
方法二:自定义 JSONEncoder
class PersonEncoder(json.JSONEncoder): def default(self, obj): if isinstance(obj, Person): return {'name': obj.name, 'age': obj.age} return super().default(obj) json_str = json.dumps(p, cls=PersonEncoder, ensure_ascii=False, indent=2) print(json_str)

六、实际应用场景

  1. API 接口通信
    Web 开发中,客户端与服务器常通过 JSON 传输数据。Python 后端可使用json模块解析请求体或构造响应内容。

  2. 配置文件存储
    使用.json文件保存程序配置,如数据库连接信息、用户偏好设置等。

  3. 日志记录与数据导出
    将结构化数据以 JSON 格式保存,便于后续分析或迁移。

  4. 跨语言数据交换
    JSON 是语言无关的格式,Python 生成的 JSON 可被 JavaScript、Java、Go 等语言解析。


七、性能建议

  • 对于大量数据操作,避免频繁调用dumps/loads,可考虑批量处理。
  • 若需更高性能,可使用第三方库如ujsonorjson(非标准库,但兼容性好)。

总结

Python 的json模块是一个功能强大且简单易用的标准库,能够高效地完成 JSON 数据的序列化与反序列化。掌握其基本用法对于从事 Web 开发、数据处理或自动化脚本编写的开发者来说至关重要。

通过本文的学习,你应该已经掌握了:

  • 如何使用dumpsloads进行字符串级别的转换;
  • 如何使用dumpload操作 JSON 文件;
  • 如何处理中文、美化输出;
  • 如何扩展支持自定义对象;
  • 了解常见的使用场景与最佳实践。

📌参考文档
Python 官方文档 - json 模块

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

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

相关文章

Multi-Content GAN for Few-Shot Font Style Transfer(用于少样本字体风格迁移的多内容GAN)

预训练和正式训练&#xff0c;预选练是正式训练的第一阶段但二者损失不同注意&#xff1a;本论文是对字母的风格迁移在未来对汉字进行风格迁移时预训练的笔画划分&#xff08;或常用字形&#xff09;可能存在挑战预训练&#xff1a;通过对抗网络对26个字母的平均字形进行学习。…

主流 AI IDE 之一的 Claude Code 介绍

Claude Code 是 Anthropic&#xff08;Claude AI 的开发公司&#xff09;于 2025 年推出的代理式&#xff08;agentic&#xff09;编码工具&#xff0c;目前被公认为终端里最强的 AI 编程助手之一。它直接运行在你的终端&#xff08;Terminal / PowerShell / cmd&#xff09;&a…

两两交换链表中的节点-day04

两两交换链表中的节点 题目链接:https://leetcode.cn/problems/swap-nodes-in-pairs/solutions/444474/liang-liang-jiao-huan-lian-biao-zhong-de-jie-di-91/ 思路:新建头结点,保存第1结点,第2个结点,第3个结点的…

Mars-Admin 基于Spring Boot 3 + Vue 3 + UniApp的企业级管理系统

Mars-Admin 企业级管理系统 &#x1f525; 开箱即用的企业级全栈管理系统 &#x1f525; 一套基于 Spring Boot 3 Vue 3 UniApp 的现代化企业管理平台&#xff0c;采用前后端分离架构&#xff0c;提供完整的权限管理、用户管理、移动端支持等功能&#xff0c;是中小企业快速…

2026必备!继续教育TOP9AI论文写作软件测评与推荐

2026必备&#xff01;继续教育TOP9AI论文写作软件测评与推荐 2026年继续教育AI论文写作工具测评&#xff1a;精准筛选&#xff0c;高效助力学术创作 随着人工智能技术的不断进步&#xff0c;AI论文写作工具在继续教育领域的应用愈发广泛。对于需要撰写论文、发表研究成果的学员…

贵金属回收攻略:本地高价回收不踩坑,今日金价实时更新 - 非研科技

贵金属回收避坑指南:这 3 个套路一定要避开 1. 警惕“高价吸引,低价结算” 部分非正规商家会在网上标注“黄金回收 450 元/克”的超高价,吸引客户到店后,再以“纯度不足”“有磨损”“要扣手续费”等理由压低价格,…

MFC 对话框Alt+F4退出程序实例

MFC 对话框应用程序按AltF4退出程序实现方法 重写OnSysCommand函数 1.添加消息处理函数 在对话框类的头文件&#xff08;.h&#xff09;中添加&#xff1a; protected:virtual void OnSysCommand(UINT nID, LPARAM lParam);DECLARE_MESSAGE_MAP()2.在实现文件&#xff08;.cpp&…

SonarQube-开源的持续代码质量检测平台

一、SonarQube 核心定义 SonarQube 是一款开源的持续代码质量检测平台,由 SonarSource 公司开发维护。它通过自动化扫描,从代码质量、安全漏洞、可维护性、合规性四大维度对代码进行全方位审查,帮助团队在软件开发生…

AI 模型输出学术内容准确率飙升97%!我只用了这个简单提示词技巧

经常用AI工具辅助学术科研与写作的同仁,可能已经对提示词工程掌握的程度比较深了。为了让模型输出的内容更准确一点,提示词工程师也会研究各种复杂的提示词技巧,比如设定角色、思维链、多样本学习等等。 但最近七哥发现还有一种能提升模型输出内容准确率的方法,该方法出自…

读《大明王朝1566》有感

《大明王朝1566》从一件改稻为桑的事说起,牵扯出大明各个阶层之间的利益斗争。嘉靖年间,一年一度的国家财政会议召开,六部主管向皇上汇报去年的财政支出情况,并上报本年度的财政支出计划。去年财政收支情况依然不容…

亲测好用!10款一键生成论文工具测评,本科生毕业论文必备

亲测好用&#xff01;10款一键生成论文工具测评&#xff0c;本科生毕业论文必备 学术写作工具测评&#xff1a;为何需要这份2026年榜单&#xff1f; 随着人工智能技术的不断进步&#xff0c;越来越多的学术写作工具被推向市场&#xff0c;帮助学生和研究人员提升论文撰写效率。…

收藏这篇就够了!AI大模型学习路线全解析:从数学基础到实战应用

文章提供了AI大模型从零基础到进阶的完整学习路线&#xff0c;包括数学与编程基础、机器学习入门、深度学习深入、大模型探索、进阶应用及社区资源。详细列出了各阶段的理论学习资源&#xff08;书籍、课程&#xff09;和实践项目&#xff0c;并提供了大量学习资源包、视频教程…

2026本科必备9个降AI率工具测评榜单

2026本科必备9个降AI率工具测评榜单 降AI率工具测评&#xff1a;为何你需要一份专业榜单&#xff1f; 在2026年的学术环境中&#xff0c;论文的AI率检测已经成为毕业和科研的关键门槛。许多学生在提交前才发现自己的论文AI率超标&#xff0c;甚至被直接打回修改&#xff0c;严重…

读人本智能产品设计6原则05表达(下)

读人本智能产品设计6原则05表达(下)1. 物体的表达方式 1.1. 随着产品变得更具有互动性和内容驱动性,例如亚马逊的Alexa或苹果的Siri,语音交互成为多模态系统的必要组成部分 1.2. 语音要素必须与灯光、非语音提示、动…

亲测好用10个一键生成论文工具,研究生高效写作必备!

亲测好用10个一键生成论文工具&#xff0c;研究生高效写作必备&#xff01; AI 工具如何助力论文写作&#xff1f;这些功能你不可不知 随着人工智能技术的不断发展&#xff0c;越来越多的研究生开始借助 AI 工具来提升论文写作效率。在当前学术研究中&#xff0c;AI 降重工具不…

AI产品经理必修课:拆解大模型落地的关键能力与实战技巧

文章从四大维度系统阐述了AI产品经理的必备能力&#xff1a;两大定律&#xff08;AI能力定律和AI提效定律&#xff09;强调判断力的重要性&#xff1b;五要素&#xff08;业务人员参与、AI能力认知、编程能力、小处着手、老板支持&#xff09;确保大模型成功落地&#xff1b;技…

AI大模型学习路线(非常详细)收藏这一篇就够了!从零基础到进阶的完整指南+免费资源包

本文提供了AI大模型从零基础到进阶的完整学习路线&#xff0c;涵盖数学基础、编程技能、机器学习、深度学习及大模型应用等阶段&#xff0c;并推荐各阶段优质学习资源和实战项目。文章还分享了免费获取AI大模型学习资料的方法&#xff0c;帮助程序员系统掌握大模型技术&#xf…

大模型六大热门岗位详解:从入门到精通的必学路径,大模型职业发展指南

本文解析大模型领域六大类岗位&#xff08;技术研发、算法、数据、产品、深度学习和垂直领域&#xff09;的职责与要求&#xff0c;提供从入门到精通的系统学习路径&#xff0c;帮助读者掌握大模型技术&#xff0c;找到适合的职业方向&#xff0c;并附有免费学习资源。AI行业人…

关于弦理论的十维自洽的个人见解

近日&#xff0c;看到一篇关于弦理论需要十维才能自洽的科普类作品&#xff0c;其中提到人类世界处在31个维度里面&#xff08;即三维世界加时间轴的四维空间里&#xff09;&#xff0c;从数学角度似乎另外6个维度是假设它们在极小尺寸下才能让理论得以运行。 我个人有个看法&a…

大模型学习路线图:从基础到实战,程序员必看的学习指南_大模型学习路线(2026最新)神仙级大模型教程分享

文章提供了大模型学习的七个阶段路线图&#xff1a;从数学编程基础到机器学习、深度学习、NLP&#xff0c;再到大规模语言模型和应用开发&#xff0c;最后是持续学习。每个阶段包含关键知识点和学习资源&#xff0c;还提供了视频教程、技术文档和面试题等额外资源&#xff0c;帮…