Python中JSON是什么意思?——数据交换的轻量级语言解析
在Python开发中,我们经常会遇到“JSON”这个词,无论是处理API接口返回的数据、配置文件存储,还是跨语言数据传输,JSON都扮演着重要角色,Python中的JSON究竟是什么?它为什么如此常用?本文将从定义、作用、核心方法及实际应用场景出发,带你彻底理解Python中的JSON。
JSON:不仅仅是“数据格式”,更是“通用语言”
JSON(JavaScript Object Notation)是一种轻量级的数据交换格式,最初基于JavaScript语言的一个子集,但因其简洁、易读的特性,已成为跨语言数据交换的“通用语言”,在Python中,JSON本质上是一种文本格式,用于表示结构化数据(如字典、列表、字符串、数字等),方便在不同编程语言(如Python、Java、C++、JavaScript等)之间传递和解析数据。
为什么Python需要JSON?
Python内置的数据类型(如字典dict、列表list)虽然强大,但它们是Python独有的,无法直接被其他语言识别,Python中的字典{"name": "张三", "age": 18}在Java中无法直接解析,而JSON格式的{"name": "张三", "age": 18}是所有语言都支持的“通用结构”,能轻松实现跨语言数据互通,JSON文本格式便于存储和传输(相比二进制格式更易调试),因此成为Web开发、API通信、配置文件等场景的首选。
Python与JSON:核心是“转换”
Python中处理JSON的核心,是在Python原生数据类型和JSON文本格式之间进行转换,这种转换主要通过Python内置的json模块实现,该模块提供了4个核心方法,分别对应“序列化”和“反序列化”两种操作:
序列化:将Python对象转为JSON字符串(json.dumps())
“序列化”是指将Python的字典、列表等对象转换为JSON格式的字符串,以便存储或传输。json.dumps()(dump string)是核心方法:
import json
# Python字典
python_dict = {"name": "李四", "age": 20, "hobbies": ["reading", "coding"]}
# 转为JSON字符串
json_str = json.dumps(python_dict)
print(json_str) # 输出: {"name": "李四", "age": 20, "hobbies": ["reading", "coding"]}
# 注意:JSON字符串中的双引号是标准格式,单引号不符合JSON规范
json.dumps()常用参数:
indent:格式化输出,使JSON字符串更易读(如indent=4)。formatted_json = json.dumps(python_dict, indent=4, ensure_ascii=False) print(formatted_json) # 输出(带缩进): # { # "name": "李四", # "age": 20, # "hobbies": [ # "reading", # "coding" # ] # }ensure_ascii:处理非ASCII字符(如中文),默认为True(非ASCII字符会转为\u转义形式),设为False可保留原字符。sort_keys:对字典的键进行排序,输出有序的JSON字符串。
反序列化:将JSON字符串转为Python对象(json.loads())
“反序列化”是指将JSON格式的字符串解析为Python的原生数据类型(字典、列表等),方便在代码中操作。json.loads()(load string)是核心方法:
import json
# JSON字符串
json_str = '{"name": "王五", "age": 22, "is_student": true}'
# 转为Python字典
python_dict = json.loads(json_str)
print(python_dict) # 输出: {'name': '王五', 'age': 22, 'is_student': True}
print(python_dict["name"]) # 输出: 王五(可通过字典方式访问)
文件操作:直接读写JSON文件(json.dump()和json.load())
除了字符串转换,json模块还提供了直接操作JSON文件的方法,避免手动读写文件的麻烦:
-
json.dump():将Python对象写入JSON文件(序列化到文件)。import json data = {"city": "北京", "population": 2154} with open("city.json", "w", encoding="utf-8") as f: json.dump(data, f, indent=4, ensure_ascii=False) # 生成city.json文件,内容为: # { # "city": "北京", # "population": 2154 # } -
json.load():从JSON文件中读取数据并转为Python对象(从文件反序列化)。with open("city.json", "r", encoding="utf-8") as f: loaded_data = json.load(f) print(loaded_data) # 输出: {'city': '北京', 'population': 2154}
Python与JSON的数据类型对应关系
JSON和Python的数据类型并非完全一一对应,了解它们的映射关系是正确处理JSON的关键:
| JSON数据类型 | Python数据类型 | 说明 |
|---|---|---|
| object | dict | JSON的键值对对应Python字典 |
| array | list | JSON的数组对应Python列表 |
| string | str | JSON字符串对应Python字符串 |
| number | int/float | JSON数字(整数/浮点数)对应Python的int或float |
| true/false | True/False | JSON的布尔值对应Python的True/False(首字母大写) |
| null | None | JSON的null对应Python的None |
常见问题:JSON中的true/false/null在Python中是什么?
- JSON的
true在Python中是True(布尔类型,首字母大写)。 - JSON的
false在Python中是False。 - JSON的
null在Python中是None。
JSON字符串{"is_valid": false}通过json.loads()解析后,会得到{"is_valid": False}(注意False的首字母大写)。
JSON在Python中的典型应用场景
API数据交互
现代Web API(如RESTful API)普遍使用JSON作为数据交换格式,Python通过requests库获取API返回的JSON数据,并用json.loads()解析:
import requests
import json
# 获取GitHub用户信息(API返回JSON格式)
response = requests.get("https://api.github.com/users/python")
user_data = response.json() # response.json()是requests库封装的json.loads()方法
print(f"用户名: {user_data['name']}, 仓库数: {user_data['public_repos']}")
配置文件存储
相比.ini或.xml文件,JSON格式更简洁,且能表示复杂嵌套结构,适合存储应用配置:
# config.json
{
"database": {
"host": "localhost",
"port": 3306,
"user": "root",
"password": "123456"
},
"logging": {
"level": "INFO",
"file": "app.log"
}
}
# Python读取配置
import json
with open("config.json", "r", encoding="utf-8") as f:
config = json.load(f)
db_host = config["database"]["host"]
print(f"数据库主机: {db_host}")
数据持久化
当需要将Python对象(如字典、列表)保存到文件中,以便后续使用时,JSON是简单高效的选择(相比pickle,JSON可读性更强,且跨语言支持)。
# 保存数据到JSON文件
data = {"students": [{"name": "张三", "score": 90}, {"name": "李四", "score": 85}]}
with open("students.json", "w", encoding="utf-8") as f:
json.dump(data, f, indent=4)
# 从JSON文件加载数据
with open("students.json", "r", encoding="utf-8") as f:
loaded_data = json.load(f)
print(loaded_data["students"][0]["name"]) # 输出: 张三
JSON的局限性及注意事项
不支持所有Python数据类型
JSON无法表示Python特有的数据类型,如:
- 集合(
set):JSON没有集合类型,需转为列表存储。 - 元组(
tuple):JSON会将其转为列表(反序列化后也是列表,无法区分元组和列表)。 - 自定义对象(如



还没有评论,来说两句吧...