Phân tích cú pháp JSON của Python: Tuần tự hóa & Giải tuần tự hóa

Tìm hiểu cách đọc, viết và phân tích dữ liệu JSON trong Python. Nắm vững json.loads, json.dumps và tùy chỉnh bộ mã hóa/giải mã JSON.

Thử trong Trình chỉnh sửa

Tổng quan

JSON (Ký hiệu đối tượng JavaScript) là định dạng trao đổi dữ liệu nhẹ, thống trị các API, cấu hình và tải trọng cơ sở dữ liệu web hiện đại. Vì cấu trúc JSON giống với từ điển và danh sách Python nên việc dịch giữa chúng cực kỳ liền mạch. Python được trang bị mô-đun `json` tích hợp, giúp dễ dàng phân tích các chuỗi JSON thành các đối tượng Python và chuyển đổi các đối tượng Python trở lại thành chuỗi JSON.

Quá trình dịch một đối tượng Python (như từ điển) thành chuỗi JSON thô được gọi là Tuần tự hóa hoặc mã hóa. Việc này được xử lý bởi `json.dumps()` (đối với chuỗi) và `json.dump()` (để ghi trực tiếp vào tệp). Bạn có thể kiểm soát các tham số định dạng như `thụt lề` để làm đẹp JSON hoặc `sort_keys` để sắp xếp các thuộc tính theo thứ tự bảng chữ cái. Ngược lại, việc phân tích chuỗi JSON thành từ điển Python được gọi là Deserialization, được thực thi thông qua `json.loads()` và `json.load()`.

Trong khi các loại Python tiêu chuẩn như chuỗi, số, danh sách và ký tự tự động tuần tự hóa thành JSON, thì các đối tượng tùy chỉnh (như các lớp hoặc đối tượng datetime) thì không. Cố gắng mã hóa trực tiếp một đối tượng tùy chỉnh sẽ gây ra `Lỗi Loại`. Để khắc phục điều này, các nhà phát triển phải tạo một lớp bộ mã hóa tùy chỉnh kế thừa từ `json.JSONEncode` và ghi đè phương thức `.default()` để tuần tự hóa các lớp thành từ điển có thể đọc được. Nắm vững thao tác JSON là chìa khóa để giao tiếp với các dịch vụ web bên ngoài.

Đầu ra mã & thực thi

Chuyển đổi từ điển thành chuỗi JSON và phân tích cú pháp lại bằng thư viện json tích hợp.

import json

# Python Dictionary representing a user profile
user_profile = {
    "name": "Alex",
    "is_premium": True,
    "skills": ["Python", "Docker"],
    "age": 28
}

# Serialize dictionary to JSON string
json_string = json.dumps(user_profile, indent=2)
print("--- JSON String ---")
print(json_string)

# Deserialize JSON string back to dictionary
parsed_dict = json.loads(json_string)
print("\n--- Parsed Python Dictionary ---")
print(f"Name: {parsed_dict['name']}")
print(f"First Skill: {parsed_dict['skills'][0]}")
Đầu ra thiết bị đầu cuối
--- JSON String ---
{
  "name": "Alex",
  "is_premium": true,
  "skills": [
    "Python",
    "Docker"
  ],
  "age": 28
}

--- Parsed Python Dictionary ---
Name: Alex
First Skill: Python

Triển khai từng bước

  • Gửi tải trọng và đọc dữ liệu từ API REST
  • Lưu trữ tùy chọn cấu hình bên trong tệp settings.json
  • Truyền tải trọng có cấu trúc giữa các vi dịch vụ

Câu hỏi thường gặp

Sự khác biệt giữa json.dump và json.dumps là gì?

json.dump (không có 's') ghi dữ liệu JSON trực tiếp vào luồng tệp. json.dumps (với 's') tuần tự hóa dữ liệu thành một biến chuỗi Python.

Bạn xử lý lỗi giải mã JSON như thế nào?

Gói mã phân tích cú pháp của bạn trong khối thử/ngoại trừ bắt 'json.JSONDecodeError' để xử lý một cách khéo léo các chuỗi JSON không đúng định dạng.

Chủ đề liên quan

Tài nguyên Python được đề xuất

Mở rộng kiến thức của bạn với các hướng dẫn tương tác, bảng ghi chú và so sánh mã có liên quan.