hocvietcode.com
  • Trang chủ
  • Học lập trình
    • Lập trình C/C++
    • Cấu trúc dữ liệu và giải thuật
    • Lập trình HTML
    • Lập trình Javascript
      • Javascript cơ bản
      • ReactJS framework
      • AngularJS framework
      • Typescript cơ bản
      • Angular
      • NodeJS
    • Lập trình Mobile
      • Lập Trình Dart Cơ Bản
        • Dart Flutter Framework
    • Cơ sở dữ liệu
      • MySQL – MariaDB
      • Micrsoft SQL Server
      • Extensible Markup Language (XML)
      • JSON
      • MongoDB
    • Lập trình PHP
      • Lập trình PHP cơ bản
      • Laravel Framework
    • Lập trình Java
      • Java Cơ bản
      • Spring Boot
    • Lập trình C#
      • Lập Trình C# Cơ Bản
      • ASP.NET Core MVC
    • Machine Learning
    • Git và Github
  • WORDPRESS
    • WordPress cơ bản
    • WordPress nâng cao
    • Chia sẻ WordPress
  • Kiến thức hệ thống
    • Microsoft Azure
    • Docker
    • Linux
  • Chia sẻ IT
    • Tin học văn phòng
      • Microsoft Word
      • Microsoft Excel
    • Marketing
      • Google Adwords
      • Facebook Ads
      • Kiến thức khác
    • Chia sẻ phần mềm
    • Review công nghệ
    • Công cụ – tiện ích
      • Kiểm tra bàn phím online
      • Kiểm tra webcam online
  • Lập trình Python
Đăng nhập
  • Đăng nhập / Đăng ký

Please enter key search to display results.

Home
  • Lập trình Python
Python bài 20: Serialization với JSON và pickle

Python bài 20: Serialization với JSON và pickle

  • 18-10-2026
  • Toanngo92
  • 0 Comments

Giáo trình Python miễn phí · Chương 10/12: Tệp và serialization · Bài 20/24.

← Bài 19 · Mục lục 12 chương · Bài 21 →

Mục lục

  • Mục tiêu bài học
  • Serialization và deserialization
  • Kiểm tra cấu trúc sau khi đọc
  • Pickle chỉ dành cho nguồn tin cậy
  • Lỗi thường gặp và lưu ý
  • Ghi nhớ
  • Tài liệu đối chiếu

Mục tiêu bài học

Chuyển dữ liệu thành dạng lưu/truyền được, đọc lại đúng cấu trúc và biết giới hạn của JSON, pickle.

Serialization và deserialization

Serialization biến dữ liệu trong chương trình thành biểu diễn có thể lưu hoặc truyền; deserialization khôi phục dữ liệu từ biểu diễn đó. JSON phù hợp trao đổi giữa nhiều ngôn ngữ, pickle gắn với đối tượng Python và có yêu cầu tin cậy riêng.

json.dumps() trả chuỗi; json.loads() nhận chuỗi. json.dump()/load() làm việc với đối tượng tệp. JSON dùng true, false, null, còn Python dùng True, False, None; thư viện chuyển đổi tương ứng. Không dùng eval() để đọc JSON hoặc dữ liệu người khác gửi.

import json
from pathlib import Path

hoc_vien = {"ten": "Nguyễn An", "diem": [8, 9], "dang_hoc": True}
chuoi = json.dumps(hoc_vien, ensure_ascii=False)
print(chuoi)
du_lieu = json.loads(chuoi)
print(du_lieu["ten"])
tep = Path("hoc_vien_demo.json")
with tep.open("w", encoding="utf-8") as f:
    json.dump(hoc_vien, f, ensure_ascii=False, indent=2)
with tep.open(encoding="utf-8") as f:
    doc_lai = json.load(f)
print(doc_lai == hoc_vien)

Kết quả:

{"ten": "Nguyễn An", "diem": [8, 9], "dang_hoc": true}
Nguyễn An
True

Kiểm tra cấu trúc sau khi đọc

JSON hợp lệ cú pháp chưa chắc hợp lệ theo nghiệp vụ. Có thể nhận list trong khi chương trình cần dict, hoặc điểm dạng chuỗi. Kiểm tra kiểu, khóa bắt buộc và khoảng giá trị sau khi parse. JSONDecodeError không thay cho validation nội dung.

JSON không trực tiếp biểu diễn set, datetime hoặc đối tượng lớp tùy ý. Tuple trở thành JSON array và đọc lại là list. Khóa object của JSON là chuỗi. Nếu cần giữ kiểu đặc biệt, thiết kế quy ước rõ ràng, ví dụ ngày theo định dạng ISO 8601.

import json

def doc_ten(text):
    data = json.loads(text)
    if not isinstance(data, dict):
        raise ValueError("Cần một JSON object")
    ten = data.get("ten")
    if not isinstance(ten, str) or not ten.strip():
        raise ValueError("Thiếu tên hợp lệ")
    return ten.strip()

print(doc_ten('{"ten": "  An  "}'))

Kết quả:

An

Pickle chỉ dành cho nguồn tin cậy

pickle có thể lưu nhiều kiểu đối tượng Python hơn JSON, nhưng nạp pickle có thể thực thi mã. Chỉ unpickle dữ liệu do bạn kiểm soát và tin cậy; không nạp tệp đính kèm, dữ liệu upload hoặc phản hồi mạng chưa được tin cậy. Nhị phân không đồng nghĩa với mã hóa hoặc bảo mật.

import pickle

# Dữ liệu do chính chương trình tạo trong ví dụ này.
blob = pickle.dumps({"diem": [8, 9]})
ban_sao = pickle.loads(blob)
print(ban_sao["diem"])

Kết quả:

[8, 9]

Lỗi thường gặp và lưu ý

  • ensure_ascii=False giữ chữ tiếng Việt dễ đọc trong JSON; tệp vẫn cần encoding UTF-8.
  • Không dùng pickle như định dạng trao đổi công khai giữa các hệ thống; chọn JSON khi đáp ứng yêu cầu dữ liệu.

Ghi nhớ

Chọn định dạng theo đối tượng trao đổi và mức tin cậy. Phân biệt parse thành công với dữ liệu hợp lệ, quản lý lỗi tệp và lỗi định dạng riêng.

Tài liệu đối chiếu

  • JSON
  • Pickle

← Bài 19 · Mục lục 12 chương · Bài 21 →

Bài viết liên quan:

Giáo trình Python: mục lục 12 chương, 24 bài từ cơ bản đến ứng dụng
Python bài 24: Lock, Queue và thiết kế worker an toàn
Python bài 23: Thread, start, join và concurrency
Python bài 22: Kết nối MySQL và CRUD có transaction
Python bài 21: Gọi HTTP API, xử lý JSON và tải dữ liệu
Python bài 19: Đọc ghi tệp, pathlib, UTF-8 và CSV
Python bài 18: Closure, decorator và functools.wraps
Python bài 17: Iterable, iterator, generator và yield
Python bài 16: Type hints, logging và kiểm thử chương trình
Python bài 15: Ngoại lệ, traceback và kỹ năng debug
Python bài 14: Đóng gói, property, kế thừa và đa hình
Python bài 13: Class, object, thuộc tính và các loại phương thức

Dịch vụ thiết kế Wesbite

NỘI DUNG MỚI CẬP NHẬT

Giáo trình Python: mục lục 12 chương, 24 bài từ cơ bản đến ứng dụng

Python bài 24: Lock, Queue và thiết kế worker an toàn

Python bài 23: Thread, start, join và concurrency

Python bài 22: Kết nối MySQL và CRUD có transaction

Python bài 21: Gọi HTTP API, xử lý JSON và tải dữ liệu

Giới thiệu

hocvietcode.com là website chia sẻ và cập nhật tin tức công nghệ, chia sẻ kiến thức, kỹ năng. Chúng tôi rất cảm ơn và mong muốn nhận được nhiều phản hồi để có thể phục vụ quý bạn đọc tốt hơn !

Liên hệ quảng cáo: [email protected]

Kết nối với HỌC VIẾT CODE

© hocvietcode.com - Tech888 Co .Ltd since 2019

Đăng nhập

Trở thành một phần của cộng đồng của chúng tôi!
Registration complete. Please check your email.
Đăng nhập bằng google
Đăng kýBạn quên mật khẩu?

Create an account

Welcome! Register for an account
The user name or email address is not correct.
Registration confirmation will be emailed to you.
Log in Lost your password?

Reset password

Recover your password
Password reset email has been sent.
The email could not be sent. Possible reason: your host may have disabled the mail function.
A password will be e-mailed to you.
Log in Register
×