溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

怎么使用Python解析JSON

發布時間:2021-12-30 13:34:31 來源:億速云 閱讀:137 作者:iii 欄目:開發技術
# 怎么使用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"
  }
}

Python內置json模塊

json.loads()方法

將JSON字符串轉換為Python對象:

import json

json_str = '{"name": "李四", "age": 25}'
data = json.loads(json_str)
print(type(data))  # <class 'dict'>
print(data["name"])  # 李四

json.load()方法

從文件讀取JSON數據:

with open('data.json', 'r', encoding='utf-8') as f:
    data = json.load(f)

json.dumps()與json.dump()

將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 美化輸出格式

處理復雜JSON結構

嵌套對象訪問

data = {
    "user": {
        "profile": {
            "address": {
                "city": "上海"
            }
        }
    }
}

# 使用鏈式get()避免KeyError
city = data.get('user', {}).get('profile', {}).get('address', {}).get('city')

處理JSON數組

students = '''
[
    {"id": 1, "name": "小明"},
    {"id": 2, "name": "小紅"}
]
'''

data = json.loads(students)
for student in data:
    print(student["name"])

第三方庫推薦

1. simplejson

import simplejson as json  # 兼容性更好,支持更多數據類型

2. ujson(UltraJSON)

import ujson  # 性能比內置json快3-5倍

3. orjson(Rust實現)

import orjson  # 目前最快的JSON庫,支持datetime

性能對比(處理1MB JSON):

解析時間
json 120ms
ujson 35ms
orjson 25ms

性能優化建議

  1. 批量處理:避免在循環中多次解析
  2. 使用生成器:處理大型JSON流
    
    def stream_json(file_path):
       with open(file_path) as f:
           for line in f:
               yield json.loads(line)
    
  3. 內存映射:處理超大文件
    
    import mmap
    with open('big.json') as f:
       mm = mmap.mmap(f.fileno(), 0, access=mmap.ACCESS_READ)
       data = json.load(mm)
    

實際應用案例

案例1:API響應處理

import requests

response = requests.get('https://api.example.com/data')
if response.status_code == 200:
    data = response.json()  # 直接獲取解析后的字典

案例2:配置文件讀取

config = {}
try:
    with open('config.json') as f:
        config = json.load(f)
except FileNotFoundError:
    print("配置文件不存在")

案例3:數據清洗

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解析進行異常處理,防止無效數據導致程序崩潰 “`

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

亚洲午夜精品一区二区_中文无码日韩欧免_久久香蕉精品视频_欧美主播一区二区三区美女