Cách đọc và phân tích tệp JSON bằng Python

Tìm hiểu cách đọc, phân tích cú pháp và tải các tệp JSON trong Python bằng mô-đun json tích hợp. Làm chủ việc chuyển đổi chuỗi JSON thành từ điển và ngược lại.

Hãy thử Giải pháp này trong Trình chỉnh sửa

Tổng quan

JSON (Ký hiệu đối tượng JavaScript) là định dạng dữ liệu phổ biến nhất cho API, tệp cấu hình và lưu trữ dữ liệu. Python đi kèm với một mô-đun `json` tích hợp giúp việc đọc, phân tích cú pháp và ghi dữ liệu JSON cực kỳ đơn giản. Vì các đối tượng JSON ánh xạ hoàn hảo tới các từ điển Python và các mảng JSON ánh xạ tới các danh sách Python nên làm việc với JSON có cảm giác tự nhiên.

Để đọc JSON từ một tệp bên ngoài, bạn sử dụng hàm `json.load()` để phân tích luồng tệp và dịch cấu trúc JSON thành các kiểu dữ liệu Python. Nếu dữ liệu JSON đã được tải vào bộ nhớ dưới dạng chuỗi, thay vào đó, bạn hãy sử dụng hàm `json.loads()` ('s' là viết tắt của chuỗi). Việc chọn đúng chức năng sẽ ngăn chặn sự cố của trình phân tích cú pháp.

Khi làm việc với JSON, cách tốt nhất là xử lý các lỗi mã hóa và định dạng tiềm ẩn. Việc sử dụng `encoding="utf-8"` trong câu lệnh `open()` sẽ bảo vệ tập lệnh của bạn khỏi bị lỗi ở các ký tự đặc biệt. Việc gói các thao tác tệp trong khối `try-ngoại trừ` bắt `json.JSONDecodeError` đảm bảo ứng dụng của bạn sẽ xuống cấp một cách nhẹ nhàng nếu tệp JSON không đúng định dạng.

Đầu ra mã & thực thi

Mã này minh họa việc viết một tệp JSON mẫu, đọc và phân tích cú pháp nó trở lại từ điển Python và xử lý chuỗi JSON.

import json

# Let's write a mock JSON file first
sample_data = {
    "user": "developer123",
    "skills": ["python", "javascript", "sql"],
    "active": True
}
with open("data.json", "w", encoding="utf-8") as f:
    json.dump(sample_data, f, indent=4)

# 1. Reading from a JSON file (using json.load)
with open("data.json", "r", encoding="utf-8") as file:
    data_from_file = json.load(file)
    print("File Content type:", type(data_from_file).__name__)
    print("User skill list:", data_from_file["skills"])

# 2. Reading from a JSON string (using json.loads)
json_string = '{"host": "localhost", "port": 5432, "ssl": false}'
data_from_str = json.loads(json_string)
print("\nString Content type:", type(data_from_str).__name__)
print("Database host:", data_from_str["host"])
Đầu ra thiết bị đầu cuối
File Content type: dict
User skill list: ['python', 'javascript', 'sql']

String Content type: dict
Database host: localhost

Triển khai từng bước

  • Nhập mô-đun json tích hợp trong tập lệnh của bạn.
  • Mở tệp JSON bằng cách sử dụng open("filename.json", "r", Encoding="utf-8") làm tệp.
  • Truyền đối tượng tệp tới json.load(file) để phân tích nội dung vào từ điển Python.
  • Sử dụng json.loads(string_data) nếu bạn cần phân tích chuỗi JSON thô đã được tải trong bộ nhớ.

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

Sự khác biệt giữa json.load() và json.loads() là gì?

json.load() chấp nhận một đối tượng luồng giống như tệp (đọc từ đĩa), trong khi json.loads() chấp nhận một đối tượng chuỗi hoặc byte tiêu chuẩn chứa nội dung JSON (đọc từ bộ nhớ).

Làm cách nào để xử lý lỗi tuần tự hóa JSON cho các lớp tùy chỉnh?

Mô-đun json của Python không thể tuần tự hóa các phiên bản lớp tùy chỉnh theo mặc định. Trước tiên, bạn phải cung cấp một lớp bộ mã hóa tùy chỉnh mở rộng json.JSONEncode hoặc trích xuất các thuộc tính của phiên bản vào từ điển bằng phương thức trợ giúp.

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.