# 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進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。