# 怎么使用Python解析JSON
JSON(JavaScript Object Notation)是一種輕量級的數據交換格式,因其易讀性和跨平臺特性被廣泛應用于Web開發和數據存儲。Python作為一門強大的編程語言,提供了多種解析JSON數據的方式。本文將詳細介紹如何使用Python內置模塊和第三方庫高效解析JSON數據。
## 目錄
1. [JSON基礎介紹](#json基礎介紹)
2. [Python內置json模塊](#python內置json模塊)
- [json.loads()方法](#jsonloads方法)
- [json.load()方法](#jsonload方法)
- [json.dumps()與json.dump()](#jsondumps與jsondump)
3. [處理復雜JSON結構](#處理復雜json結構)
4. [第三方庫推薦](#第三方庫推薦)
5. [性能優化建議](#性能優化建議)
6. [實際應用案例](#實際應用案例)
7. [常見問題解答](#常見問題解答)
---
## JSON基礎介紹
JSON采用鍵值對的形式組織數據,支持以下數據類型:
- 字符串(必須用雙引號)
- 數字(整數或浮點數)
- 布爾值(true/false)
- 數組(有序集合)
- 對象(無序鍵值對)
- null
示例JSON:
```json
{
"name": "張三",
"age": 30,
"is_student": false,
"courses": ["數學", "物理"],
"address": {
"city": "北京",
"postal": "100000"
}
}
將JSON字符串轉換為Python對象:
import json
json_str = '{"name": "李四", "age": 25}'
data = json.loads(json_str)
print(type(data)) # <class 'dict'>
print(data["name"]) # 李四
從文件讀取JSON數據:
with open('data.json', 'r', encoding='utf-8') as f:
data = json.load(f)
將Python對象轉換為JSON:
data = {
"name": "王五",
"score": 95.5
}
# 轉換為字符串
json_str = json.dumps(data, ensure_ascii=False, indent=2)
# 寫入文件
with open('output.json', 'w') as f:
json.dump(data, f)
參數說明:
- ensure_ascii=False
允許非ASCII字符
- indent=2
美化輸出格式
data = {
"user": {
"profile": {
"address": {
"city": "上海"
}
}
}
}
# 使用鏈式get()避免KeyError
city = data.get('user', {}).get('profile', {}).get('address', {}).get('city')
students = '''
[
{"id": 1, "name": "小明"},
{"id": 2, "name": "小紅"}
]
'''
data = json.loads(students)
for student in data:
print(student["name"])
import simplejson as json # 兼容性更好,支持更多數據類型
import ujson # 性能比內置json快3-5倍
import orjson # 目前最快的JSON庫,支持datetime
性能對比(處理1MB JSON):
庫 | 解析時間 |
---|---|
json | 120ms |
ujson | 35ms |
orjson | 25ms |
def stream_json(file_path):
with open(file_path) as f:
for line in f:
yield json.loads(line)
import mmap
with open('big.json') as f:
mm = mmap.mmap(f.fileno(), 0, access=mmap.ACCESS_READ)
data = json.load(mm)
import requests
response = requests.get('https://api.example.com/data')
if response.status_code == 200:
data = response.json() # 直接獲取解析后的字典
config = {}
try:
with open('config.json') as f:
config = json.load(f)
except FileNotFoundError:
print("配置文件不存在")
def clean_json(data):
return {
k: v for k, v in data.items()
if v is not None and v != ''
}
Q1: 如何處理JSON中的日期格式?
from datetime import datetime
class DateTimeEncoder(json.JSONEncoder):
def default(self, obj):
if isinstance(obj, datetime):
return obj.isoformat()
return super().default(obj)
json.dumps({"time": datetime.now()}, cls=DateTimeEncoder)
Q2: 解析時出現Unicode解碼錯誤怎么辦?
# 指定正確的編碼
json.loads(json_str.encode('utf-8').decode('unicode_escape'))
Q3: 如何驗證JSON格式是否合法?
def is_valid(json_str):
try:
json.loads(json_str)
return True
except ValueError:
return False
通過本文的學習,您應該已經掌握了Python處理JSON的核心方法。建議在實際項目中:
1. 小數據量使用內置json
模塊
2. 性能敏感場景選擇orjson
3. 處理特殊數據類型時自定義編碼器
最佳實踐:始終對JSON解析進行異常處理,防止無效數據導致程序崩潰 “`
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。