python

关注公众号 jb51net

关闭
首页 > 脚本专栏 > python > Python json 字符串互转

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

作者:可可鸭~

在Python开发中,我们经常会遇到Python内置数据类型(字典、列表)和JSON字符串的相互转换需求,本文会通过实际代码案例,详细讲解json模块的两个核心方法,感兴趣的朋友跟随小编一起看看吧

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

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

一、先明确两个核心概念

二、核心方法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": "张三"}

结果分析

场景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配置文件的读写,这是实际开发中最常用的拓展场景:

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 字符串互转内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

您可能感兴趣的文章:
阅读全文