Làm việc với JSON trong Python
JSON là định dạng văn bản trao đổi dữ liệu, gần giống hệt dict Python — mọi API (kể cả Restful-Booker từ Chương 7) đều dùng JSON.
Thư viện json có sẵn giúp chuyển qua lại giữa dict và JSON. Trước hết là cặp dumps/loads — làm việc với chuỗi JSON, dùng khi gửi dữ liệu lên API hoặc đọc dữ liệu API trả về:
json.dumps() | json.loads() | |
|---|---|---|
| Chiều chuyển | dict → chuỗi JSON | chuỗi JSON → dict |
| Nghĩa tên | "dump string" — xuất ra chuỗi | "load string" — nạp từ chuỗi vào |
| Dùng khi nào | Chuẩn bị dữ liệu để gửi lên API | Đọc dữ liệu nhận về từ API |
Cặp json.dump()/json.load() (không có "s") làm y hệt vậy nhưng với file thay vì chuỗi.
Tạo file json_demo.py — hàm tao_booking chỉ để có dict mẫu, dùng lại từ 2.3:
import jsondef tao_booking(firstname, lastname, totalprice):"""Tao 1 dict du lieu booking theo dung cau truc can gui cho API."""return {"firstname": firstname,"lastname": lastname,"totalprice": totalprice,}booking_moi = tao_booking("Lan", "Nguyen", 350000)booking_json = json.dumps(booking_moi)print(booking_json)du_lieu = json.loads(booking_json)print(du_lieu["firstname"])with open("booking.json", "w") as f:json.dump(booking_moi, f)with open("booking.json", "r") as f:du_lieu_doc_lai = json.load(f)print(du_lieu_doc_lai)
Giải thích từng dòng lệnh:
| Dòng | Giải thích | In ra dòng nào ở Kết quả |
|---|---|---|
| import json | Nạp thư viện json có sẵn trong Python | — |
| booking_moi = tao_booking(...) | Tạo dict booking, giống hệt mục 2.3 | — |
| booking_json = json.dumps(booking_moi) | Chuyển dict thành chuỗi JSON (dumps = "dump string") | — |
| print(booking_json) | In chuỗi JSON vừa tạo | dòng 1 |
| du_lieu = json.loads(booking_json) | Chuyển ngược chuỗi JSON thành dict (loads = "load string") | — |
| print(du_lieu["firstname"]) | Lấy key "firstname" từ dict vừa chuyển | dòng 2: Lan |
| with open("booking.json", "w") as f: | Mở (hoặc tạo mới) file, chế độ ghi ("w"), gán vào biến f. with tự động đóng file lại sau khi dùng xong (kể cả khi có lỗi) — không cần tự gọi f.close() | — |
| json.dump(booking_moi, f) | Ghi dict thẳng vào file dưới dạng JSON (không có "s" — khác dumps trả về chuỗi) | — |
| with open("booking.json", "r") as f: | Mở lại file, chế độ đọc ("r"), cũng tự đóng khi xong | — |
| du_lieu_doc_lai = json.load(f) | Đọc file, chuyển thành dict | — |
| print(du_lieu_doc_lai) | In dict vừa đọc | dòng 3 |
Kết quả:
{"firstname": "Lan", "lastname": "Nguyen", "totalprice": 350000}Lan{'firstname': 'Lan', 'lastname': 'Nguyen', 'totalprice': 350000}
Để ý dòng đầu và dòng cuối: dict Python in bằng nháy đơn '...', còn JSON luôn dùng nháy kép "..." — khác biệt nhỏ này là lý do cần json.dumps/json.loads để chuyển đổi đúng chuẩn, thay vì coi 2 thứ là một.
- –Hàm (def): gói code để dùng lại, có thể nhận tham số và
returnkết quả. - –f-string: chuỗi
f"..."cho phép chèn biến bằng{ten_bien}. - –List: danh sách có thứ tự, đặt trong
[], duyệt bằngfor. - –Dict: dữ liệu dạng key: value, đặt trong
{}, lấy giá trị bằngdict["key"]. - –JSON: định dạng trao đổi dữ liệu của API.
json.dumps/json.loadschuyển đổi dict ↔ chuỗi JSON;json.dump/json.loadghi/đọc thẳng ra file. - –
with ... as ...:mở file (hoặc tài nguyên khác) an toàn — tự động đóng lại sau khi dùng xong, kể cả khi code bên trong bị lỗi giữa chừng.
Chương sau: cài Playwright, chạy test pytest đầu tiên — và bắt đầu dùng chính dự án thật trên GitHub từ đây.