json.dumps() và json.loads() – Xử lý JSON nhanh

  • Home
  • json.dumps() và json.loads() – Xử lý JSON nhanh
by:DCSoftTech Editorial Team Tháng mười một 14, 2026 0 Comments

json.dumps() và json.loads() – Bí quyết xử lý JSON nhanh chóng và hiệu quả trong Python

JSON (JavaScript Object Notation) đã trở thành định dạng trao đổi dữ liệu phổ biến nhất trong lập trình hiện đại. Dù bạn làm việc với API, lưu trữ cấu hình hay xử lý NoSQL, việc chuyển đổi qua lại giữa cấu trúc dữ liệu của Python (như dict, list) và chuỗi JSON là một kỹ năng không thể thiếu.

Trong Python, mô-đun chuẩn json cung cấp hai hàm cốt lõi giúp bạn xử lý tác vụ này trong tích tắc: json.dumps() và json.loads(). Hãy cùng dcsofttech khám phá chi tiết cách sử dụng, sự khác biệt và các mẹo tối ưu hóa qua bài viết dưới đây.

1. Tổng quan nhanh: dumps vs loads

Trước khi đi vào chi tiết từng hàm, hãy ghi nhớ một quy tắc đặt tên cực kỳ dễ hiểu từ Python:

  • Chữ s cuối cùng viết tắt của string (chuỗi).

  • Các hàm có chữ s (dumps, loads) làm việc trực tiếp với chuỗi (string) hoặc bytes.

  • Các hàm không có chữ s (dump, load) làm việc trực tiếp với file.

Bảng tóm tắt nhanh công dụng:

Hàm Tên gọi đầy đủ Chức năng chính Hướng chuyển đổi
json.dumps() JSON Dump String Chuyển đổi đối tượng Python thành chuỗi JSON Python Object $\rightarrow$ JSON String
json.loads() JSON Load String Phân tích chuỗi JSON thành đối tượng Python JSON String $\rightarrow$ Python Object

2. json.dumps() – Đóng gói dữ liệu Python thành chuỗi JSON

Hàm json.dumps() (Serialization/Mã hóa) dùng để chuyển đổi các kiểu dữ liệu cơ bản của Python (dictionary, list, string, int, float, boolean, None) thành một chuỗi định dạng JSON chuẩn.

Cú pháp cơ bản

Python

import json

data = {
    "id": 101,
    "name": "DC SoftTech",
    "active": True,
    "skills": ["Python", "Django", "FastAPI"]
}

# Chuyển đổi dictionary thành chuỗi JSON
json_string = json.dumps(data)
print(json_string)
# Kết quả: {"id": 101, "name": "DC SoftTech", "active": true, "skills": ["Python", "Django", "FastAPI"]}

Các tham số nâng cao giúp tối ưu hiển thị

Khi làm việc thực tế, chuỗi JSON mặc định của dumps() thường bị dính liền một dòng, khó đọc. Bạn có thể tận dụng các tham số sau:

  • indent: Định dạng lề (thụt đầu dòng) để dễ đọc (pretty-print).

  • ensure_ascii=False: Giúp hiển thị đúng các ký tự tiếng Việt có dấu thay vì mã Unicode dạng \uXXXX.

  • sort_keys=True: Sắp xếp các khóa (key) theo thứ tự bảng chữ cái.

Python

formatted_json = json.dumps(data, indent=4, ensure_ascii=False, sort_keys=True)
print(formatted_json)

Kết quả:

JSON

{
    "active": true,
    "id": 101,
    "name": "DC SoftTech",
    "skills": [
        "Python",
        "Django",
        "FastAPI"
    ]
}

3. json.loads() – Giải mã chuỗi JSON thành đối tượng Python

Ngược lại với dumps(), hàm json.loads() (Deserialization/Giải mã) nhận vào một chuỗi (hoặc bytes) có cấu trúc JSON hợp lệ và phân tích nó thành các đối tượng tương ứng trong Python (chủ yếu là dict và list).

Cú pháp cơ bản

Python

import json

json_data = '{"id": 101, "name": "DC SoftTech", "active": true, "skills": ["Python", "FastAPI"]}'

# Chuyển đổi chuỗi JSON thành dictionary Python
python_obj = json.loads(json_data)

print(type(python_obj))  # <class 'dict'>
print(python_obj["name"]) # DC SoftTech
print(python_obj["skills"][0]) # Python

Xử lý lỗi thường gặp (JSONDecodeError)

Khi nhận dữ liệu JSON từ bên ngoài (như từ API bên thứ ba hoặc file cấu hình người dùng nhập), chuỗi JSON có thể bị lỗi cú pháp (thiếu dấu ngoặc kép, thừa dấu phẩy cuối…). Bạn nên bọc json.loads() trong khối try-except:

Python

import json

bad_json = '{"name": "DC SoftTech", "active": true,}' # Lỗi thừa dấu phẩy ở cuối

try:
    data = json.loads(bad_json)
except json.JSONDecodeError as e:
    print(f"Lỗi cú pháp JSON: {e}")

4. Ánh xạ kiểu dữ liệu (Mapping Table)

Khi chuyển đổi qua lại, Python và JSON có sự tương ứng về kiểu dữ liệu như sau:

Python JSON
dict object
list, tuple array
str string
int, float number
True / False true / false
None null

Lưu ý: Tuple trong Python khi chuyển qua dumps() sẽ bị biến đổi thành dạng array ([]) của JSON.

5. Mẹo chuyên nghiệp (Pro Tips) khi xử lý JSON

  1. Xử lý đối tượng phức tạp (như Datetime): Mặc định json.dumps() sẽ báo lỗi TypeError nếu gặp các kiểu dữ liệu không hỗ trợ trực tiếp như datetime. Bạn cần truyền thêm hàm default để xử lý:

    Python

    import json
    from datetime import datetime
    
    data = {"time": datetime.now()}
    
    # Sử dụng .isoformat() để chuyển datetime thành string
    json_str = json.dumps(data, default=str)
    print(json_str)
    
  2. Làm việc trực tiếp với File (json.dump và json.load): Thay vì đọc nội dung file ra biến string rồi dùng loads(), hãy dùng trực tiếp json.load() để tiết kiệm bộ nhớ:

    Python

    # Đọc file JSON
    with open('config.json', 'r', encoding='utf-8') as f:
        config = json.load(f)
    
    # Ghi file JSON
    with open('output.json', 'w', encoding='utf-8') as f:
        json.dump(data, f, indent=4, ensure_ascii=False)

Tổng kết

Hiểu rõ và sử dụng thành thạo json.dumps() và json.loads() giúp bạn tối ưu hóa tốc độ xử lý dữ liệu, làm sạch mã nguồn và tránh được các lỗi liên quan đến định dạng dữ liệu trong Python. Hãy áp dụng ngay các tham số như ensure_ascii=False và indent để mã nguồn của bạn chuyên nghiệp và dễ bảo trì hơn!

Categories:

Leave Comment