Python json 模块核心用法之字典 / 列表与 JSON 字符串互转的操作

 更新时间:2026年02月09日 15:33:49   作者:可可鸭~  
在Python开发中,我们经常会遇到Python内置数据类型(字典、列表)和JSON字符串的相互转换需求,本文会通过实际代码案例,详细讲解json模块的两个核心方法,感兴趣的朋友跟随小编一起看看吧

在Python开发中,我们经常会遇到Python内置数据类型(字典、列表)JSON字符串的相互转换需求——比如接口数据交互、配置文件读写、跨语言数据传递等场景,而Python内置的json模块就是专门解决这个问题的工具,无需额外安装,直接导入即可使用。

本文会通过实际代码案例,详细讲解json模块的两个核心方法:json.dumps()(Python对象转JSON字符串)和json.loads()(JSON字符串转Python对象),同时对比新手易混淆的str()转换,以及讲解使用过程中的中文显示常见报错问题,让你彻底掌握基础用法。

一、先明确两个核心概念

  • Python对象:本文主要指字典(dict)列表(list)(列表内嵌套字典是最常见的接口数据格式),是Python程序内部使用的数据类型。
  • JSON字符串:符合JSON语法规范的字符串,是跨平台/跨语言的通用数据格式,语法要求键值对必须用双引号,而Python字典支持单/双引号,这是核心区别。
  • json模块的核心作用:实现Python对象和JSON字符串的双向序列化/反序列化,而非简单的字符串转换。

二、核心方法1:json.dumps() —— Python对象转JSON字符串

json.dumps()的作用是将Python字典/列表序列化为标准JSON字符串,语法格式:

json.dumps(python_obj, ensure_ascii=False, indent=None, ...)

关键参数ensure_ascii=False,默认值为True,若不设置,中文会被转成\uXXX格式的Unicode编码,设置后可正常显示中文,这是开发中必设的参数。

我们通过单个字典字典嵌套列表两种最常见的场景,对比str()(简单字符串转换)和json.dumps()(标准JSON转换)的区别。

场景1:单个Python字典转字符串/JSON字符串

代码示例:

import json  # 导入内置json模块,无需额外安装
# 定义一个Python字典对象
d = {
    "name":"张三"
}
# 方式1:用str()做简单的字符串转换
print(str(d))
# 方式2:用json.dumps()转标准JSON字符串,设置ensure_ascii=False显示中文
s = json.dumps(d, ensure_ascii=False)
print(s)

运行结果

{'name': '张三'}
{"name": "张三"}

结果分析

  • str(d):只是将Python字典直接转为普通字符串,保留了Python的语法特征——键值对用单引号,这并不是标准的JSON字符串,其他语言/工具无法识别。
  • json.dumps(d, ensure_ascii=False):生成标准JSON字符串,键值对用双引号(符合JSON语法规范),且中文正常显示,是开发中的正确用法。

场景2:字典嵌套列表转字符串/JSON字符串

这是接口返回数据最常见的格式(多个对象的集合),代码示例:

# 定义一个Python列表,内部嵌套两个字典
d2 = [{
    "name":"张三"
},{
    "name":"旺旺"
}]
# 方式1:str()简单转换
print(str(d2))
# 方式2:json.dumps()转标准JSON字符串
ds = json.dumps(d2, ensure_ascii=False)
print(ds)

运行结果

[{'name': '张三'}, {'name': '旺旺'}]
[{"name": "张三"}, {"name": "旺旺"}]

结果分析

和单个字典的规律一致,str(d2)生成的是Python列表的字符串表示(单引号),而json.dumps()生成的是标准JSON数组字符串(双引号),可直接被前端、其他语言解析,这也是实际开发中唯一推荐的转换方式。

三、核心方法2:json.loads() —— JSON字符串转Python对象

json.loads()的作用是将标准JSON字符串反序列化为Python字典/列表,语法格式:

json.loads(json_str)

核心注意点:该方法仅接收JSON格式的字符串作为参数,不能直接传入Python字典/列表,否则会直接报错(新手最容易踩的坑)。

先看原代码的问题(新手必避坑)

原代码中这部分写法存在语法错误,运行后会直接抛出TypeError,我们先看错误代码:

# 错误示例:直接将Python字典/列表传入json.loads()
rp = {"name": "张三"}  # 这是Python字典,不是JSON字符串
rpj = [{"name": "张三"}, {"name": "旺旺"}]  # 这是Python列表,不是JSON字符串
res_dict = json.loads(rp)  # 报错!参数不是字符串
res_list = json.loads(rpj)  # 报错!参数不是字符串

报错原因json.loads()的入参必须是字符串类型,而rp是字典、rpj是列表,类型不匹配,程序无法解析。

正确用法:先转JSON字符串,再反序列化

想要实现“Python对象→JSON字符串→Python对象”的完整流程,需先通过json.dumps()生成JSON字符串,再通过json.loads()转回Python对象,代码示例:

import json
# 1. 定义原始Python对象
rp = {"name": "张三"}  # 字典
rpj = [{"name": "张三"}, {"name": "旺旺"}]  # 列表嵌套字典
# 2. 先通过dumps()转为标准JSON字符串
rp_json = json.dumps(rp, ensure_ascii=False)
rpj_json = json.dumps(rpj, ensure_ascii=False)
print("JSON字符串rp_json:", rp_json, type(rp_json))
print("JSON字符串rpj_json:", rpj_json, type(rpj_json))
# 3. 再通过loads()转回Python对象
res_dict = json.loads(rp_json)
res_list = json.loads(rpj_json)
print("转回Python字典:", res_dict, type(res_dict))
print("转回Python列表:", res_list, type(res_list))

运行结果

JSON字符串rp_json: {"name": "张三"} <class 'str'>
JSON字符串rpj_json: [{"name": "张三"}, {"name": "旺旺"}] <class 'str'>
转回Python字典: {'name': '张三'} <class 'dict'>
转回Python列表: [{'name': '张三'}, {'name': '旺旺'}] <class 'list'>

结果分析

  • json.dumps()将Python字典/列表转为str类型的JSON字符串;
  • json.loads()根据JSON字符串的格式,自动还原为对应的Python类型——JSON对象→Python字典,JSON数组→Python列表。

四、本文核心知识点总结

  • json模块的两个核心方法
    • json.dumps(python_obj, ensure_ascii=False):Python字典/列表 → 标准JSON字符串,ensure_ascii=False是中文正常显示的关键;
    • json.loads(json_str):标准JSON字符串 → Python字典/列表,入参必须是字符串类型
  • str()和json.dumps()的本质区别
    • str():仅做简单的类型转换,保留Python语法特征(单引号),生成的不是标准JSON字符串;
    • json.dumps():做序列化转换,生成符合JSON语法的字符串(双引号),可跨平台/跨语言解析。
  • JSON和Python对象的语法差异
    • JSON:键值对必须用双引号,数组/对象嵌套格式严格;
    • Python字典/列表:键值对支持单/双引号,语法更灵活。
  • 新手必避坑
    • json.loads()不能直接传入Python字典/列表,必须先通过json.dumps()转为JSON字符串;
    • 处理中文时,json.dumps()必须加ensure_ascii=False,否则中文会被转成Unicode编码。

五、拓展使用场景

掌握基础用法后,可结合文件操作实现JSON配置文件的读写,这是实际开发中最常用的拓展场景:

import json
# 1. 将Python对象写入JSON文件
data = [{"name": "张三"}, {"name": "旺旺"}]
with open("data.json", "w", encoding="utf-8") as f:
    json.dump(data, f, ensure_ascii=False, indent=4)  # json.dump()直接写入文件,indent=4格式化缩进
# 2. 从JSON文件读取数据并转为Python对象
with open("data.json", "r", encoding="utf-8") as f:
    res = json.load(f)  # json.load()直接从文件读取并反序列化
    print(res, type(res))

注:json.dump()/json.load()dumps()/loads()的文件版,直接实现Python对象与JSON文件的互转,无需手动做文件读写的字符串处理。

到此这篇关于Python json 模块核心用法详解:字典 / 列表与 JSON 字符串互转的文章就介绍到这了,更多相关Python json 字符串互转内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • django实现登录时候输入密码错误5次锁定用户十分钟

    django实现登录时候输入密码错误5次锁定用户十分钟

    这篇文章主要介绍了django实现登录时候输入密码错误5次锁定用户十分钟,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2017-11-11
  • Python txt文件常用读写操作代码实例

    Python txt文件常用读写操作代码实例

    这篇文章主要介绍了Python txt文件常用读写操作代码实例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-08-08
  • 基于Python实现一键自动整理桌面

    基于Python实现一键自动整理桌面

    这篇文章主要为大家详细介绍了如何基于Python实现一键自动整理桌面,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下
    2026-02-02
  • Python中使用pymysql连接MySQL数据库进行数据查询

    Python中使用pymysql连接MySQL数据库进行数据查询

    在当今数字化时代,数据的重要性不言而喻,而数据库作为数据存储与管理的核心工具,在各类应用系统中扮演着关键角色,Python 作为一种广泛使用的编程语言,提供了多种与数据库交互的方式,其中 pymysql 库是连接 MySQL 数据库的常用选择之一,需要的朋友可以参考下
    2025-01-01
  • Python中plot函数语法示例详解

    Python中plot函数语法示例详解

    这篇文章主要介绍了Python中plot函数语法的相关资料,文章详细介绍了MATLAB中的plot()函数,包括其语法、如何绘制二维线图、设置线型、标记符号和颜色以及如何绘制多组二维线图等,需要的朋友可以参考下
    2024-11-11
  • python中时间、日期、时间戳的转换的实现方法

    python中时间、日期、时间戳的转换的实现方法

    这篇文章主要介绍了python中时间、日期、时间戳的转换的实现方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2019-07-07
  • python3 pip终端出现错误解决的方法详解

    python3 pip终端出现错误解决的方法详解

    这篇文章主要为大家详细介绍了python3 pip如果在终端出现错误该如何解决,文中的示例方法讲解详细,感兴趣的小伙伴可以跟随小编一起了解一下
    2025-05-05
  • Python实现提高运行速度的技巧分享

    Python实现提高运行速度的技巧分享

    这篇文章主要为大家详细介绍了Python实现提高运行速度的相关技巧,文中的示例代码讲解详细,具有一定的参考价值,感兴趣的小伙伴可以跟随小编一起了解一下
    2023-06-06
  • 用python生成mysql数据库结构文档

    用python生成mysql数据库结构文档

    大家好,本篇文章主要讲的是用python生成mysql数据库结构文档,感兴趣的同学赶快来看一看吧,对你有帮助的话记得收藏一下
    2022-01-01
  • 布同 Python中文问题解决方法(总结了多位前人经验,初学者必看)

    布同 Python中文问题解决方法(总结了多位前人经验,初学者必看)

    首先谈谈我是怎么遇到Python中文输入问题的。我写了一个小工具,用来查询Python的库函数。
    2011-03-03

最新评论