您好,登录后才能下订单哦!
密码登录
登录注册
点击 登录注册 即表示同意《亿速云用户服务条款》
# Python JSON模块怎么使用
JSON(JavaScript Object Notation)是一种轻量级的数据交换格式,Python通过内置的`json`模块提供了对JSON数据的编码和解码功能。本文将详细介绍`json`模块的核心方法、使用场景及注意事项。
---
## 一、JSON模块概述
`json`模块是Python标准库的一部分,无需额外安装。它主要提供以下功能:
- **序列化(编码)**:将Python对象转换为JSON字符串
- **反序列化(解码)**:将JSON字符串解析为Python对象
Python与JSON数据类型对应关系:
| Python类型 | JSON类型 |
|-------------|------------|
| dict | object |
| list, tuple | array |
| str | string |
| int, float | number |
| True/False | true/false |
| None | null |
---
## 二、核心方法详解
### 1. json.dumps() - 序列化为JSON字符串
```python
import json
data = {
"name": "Alice",
"age": 30,
"is_active": True,
"skills": ["Python", "SQL"]
}
json_str = json.dumps(data)
print(json_str)
# 输出:{"name": "Alice", "age": 30, "is_active": true, "skills": ["Python", "SQL"]}
常用参数:
- indent
:缩进空格数(美化输出)
- sort_keys
:是否按键排序(默认False)
- ensure_ascii
:是否转义非ASCII字符(默认True)
json_data = '{"name": "Bob", "score": 85.5}'
python_obj = json.loads(json_data)
print(python_obj["name"]) # 输出:Bob
with open("data.json", "w") as f:
json.dump(data, f)
with open("data.json", "r") as f:
loaded_data = json.load(f)
默认情况下json
无法序列化自定义类对象,可通过default
参数处理:
class User:
def __init__(self, name, age):
self.name = name
self.age = age
def user_encoder(obj):
if isinstance(obj, User):
return {"name": obj.name, "age": obj.age}
raise TypeError("Object not serializable")
user = User("Charlie", 25)
print(json.dumps(user, default=user_encoder))
结合jsonpath-ng
库实现复杂查询:
from jsonpath_ng import parse
data = {"store": {"book": [{"title": "Python基础"}, {"title": "数据分析"}]}}
expr = parse("$.store.book[*].title")
print([match.value for match in expr.find(data)])
# 输出:['Python基础', '数据分析']
from datetime import datetime
def datetime_handler(obj):
if isinstance(obj, datetime):
return obj.isoformat()
data = {"event": "meeting", "time": datetime.now()}
json.dumps(data, default=datetime_handler)
json.loads()
解析不可信来源的数据(可能引发代码注入)ijson
等流式解析库Python的json
模块提供了简单高效的JSON处理能力,掌握其核心方法后可以轻松实现:
- 前后端数据交互
- 配置文件读写
- 数据序列化存储
对于更复杂的场景(如处理特殊数据类型、超大文件等),可以考虑结合第三方库如simplejson
、ujson
或orjson
等替代方案。
“`
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。