JSON
JSON là định dạng văn bản gồm các object, array và giá trị, được dùng cho API, chú giải và đầu ra của model. Quy tắc cú pháp, ứng dụng ML, JSON Lines và code.
JSON, viết tắt của JavaScript Object Notation, là định dạng dựa trên văn bản, gọn nhẹ để lưu trữ và trao đổi dữ liệu có cấu trúc. Douglas Crockford đặc tả JSON vào đầu những năm 2000, dựa trên cú pháp object literal của JavaScript; hiện nay, JSON đã được chuẩn hóa thành IETF RFC 8259 và ECMA-404. JSON độc lập với ngôn ngữ lập trình, con người có thể đọc được và được thư viện chuẩn của hầu hết các ngôn ngữ lập trình phân tích, nhờ đó trở thành định dạng mặc định cho các API web. Trong học máy (ML), JSON truyền các dự đoán từ engine suy luận, lưu trữ chú thích dataset, ghi nhật ký metadata của experiment và xác định đầu ra có cấu trúc của mô hình ngôn ngữ lớn (LLM).
Cú pháp JSON#
Tài liệu JSON được cấu thành từ hai container và bốn loại giá trị:
- Object: Các tập hợp không có thứ tự gồm những cặp key-value nằm trong dấu ngoặc nhọn, chẳng hạn
{"name": "bus", "confidence": 0.94}. Key phải là chuỗi nằm trong dấu ngoặc kép. - Array: Các danh sách có thứ tự nằm trong dấu ngoặc vuông, chẳng hạn
[48.5, 398.0, 245.3, 902.1]. - Giá trị: Chuỗi, số, các literal
true,falsevànull, hoặc object và array lồng nhau.
Định dạng này có quy tắc nghiêm ngặt. Không cho phép comment, dấu phẩy ở cuối, chuỗi đặt trong dấu nháy đơn và các giá trị NaN và Infinity, mặc dù module json của Python mặc định ghi NaN nếu không đặt allow_nan=False, tạo ra các tệp mà parser nghiêm ngặt sẽ từ chối. RFC 8259 cũng cảnh báo rằng các số chỉ được trao đổi đáng tin cậy trong phạm vi độ chính xác kép IEEE 754; do đó, các số nguyên lớn hơn 2⁵³ − 1, chẳng hạn một số ID trong cơ sở dữ liệu, thường được gửi dưới dạng chuỗi.
JSON trong quy trình làm việc học máy#
Khi camera trong một hệ thống an ninh gửi frame đến dịch vụ phát hiện đối tượng, lớp phục vụ model thường phản hồi bằng JSON: mỗi đối tượng được phát hiện có một bản ghi chứa lớp, điểm confidence và tọa độ bounding box, sẵn sàng cho dashboard, ứng dụng di động và cơ sở dữ liệu tài liệu như MongoDB.
Các định dạng gán nhãn cũng dựa vào JSON. Dataset COCO lưu toàn bộ nhãn của một split trong một file JSON với ba danh sách chính: images chứa tên và kích thước file, categories chứa ID và tên lớp, còn annotations gồm các mục trỏ đến ảnh và danh mục theo ID, đồng thời lưu hộp dưới dạng [x, y, width, height] tính bằng pixel từ góc trên bên trái. Định dạng YOLO thay vào đó dùng một file văn bản cho mỗi ảnh với tọa độ tâm đã chuẩn hóa; chuyển đổi giữa hai định dạng là bước thường gặp trong pipeline gán nhãn dữ liệu, dù một lớp dataset tùy chỉnh cũng có thể huấn luyện YOLO trực tiếp trên JSON COCO.
JSON Lines, còn gọi là NDJSON, đặt một object JSON hoàn chỉnh trên mỗi dòng. Nhờ đó, có thể nối thêm vào file, truyền dữ liệu theo luồng và chia nhỏ file mà không cần phân tích toàn bộ tài liệu; định dạng này phù hợp với log huấn luyện, luồng dự đoán và dataset chỉ dẫn dùng để fine-tune LLM. Với LLM, JSON Schema mô tả chính xác các trường mà ứng dụng mong đợi, còn đầu ra có cấu trúc và gọi hàm giới hạn model để tạo JSON khớp với schema. GeoJSON, được chuẩn hóa trong RFC 7946, áp dụng định dạng này cho các đối tượng địa lý, cho phép phân tích ảnh vệ tinh đặt các phát hiện lên bản đồ.
Chuyển đổi dự đoán sang JSON#
Các object Results của Ultralytics YOLO tuần tự hóa dự đoán bằng to_json(), ghi một bản ghi cho mỗi phát hiện, gồm tên lớp, id lớp, confidence và các góc của box x1, y1, x2, y2, cùng tọa độ mask hoặc keypoint đối với model phân đoạn instance và ước lượng pose. Ví dụ sau chạy YOLO26 trên một ảnh mẫu rồi phân tích JSON trở lại bằng thư viện chuẩn của Python:
import json
from ultralytics import YOLO
# Tải model phát hiện YOLO26 đã huấn luyện trước và chạy suy luận
model = YOLO("yolo26n.pt")
results = model("https://ultralytics.com/images/bus.jpg")
result = results[0]
# Tuần tự hóa mọi phát hiện thành chuỗi JSON (normalize=True sẽ đưa các box về tỷ lệ 0-1)
json_string = result.to_json()
# Mọi JSON parser đều có thể đọc dữ liệu trở lại, ở đây là thành danh sách các dict Python
detections = json.loads(json_string)
print(json.dumps(detections[0], indent=2))Bản ghi được in ra là một object JSON với các key name, class và confidence, cùng một object box lồng bên trong chứa tọa độ các góc theo pixel.
JSON và các định dạng liên quan#
- YAML: Định dạng dễ đọc hơn, cho phép comment và lồng cấu trúc bằng thụt lề; thường dùng cho cấu hình huấn luyện và định nghĩa dataset. YAML 1.2 được thiết kế như một siêu tập hợp của JSON, vì vậy hầu hết tài liệu JSON đều hợp lệ dưới dạng YAML.
- XML: Định dạng dựa trên thẻ, được dùng cho chú thích Pascal VOC; dài dòng hơn JSON và hỗ trợ thuộc tính, namespace cùng schema.
- CSV: Định dạng bảng phẳng, gọn nhẹ cho dữ liệu dạng bảng nhưng không thể lồng object hoặc danh sách.
- Định dạng nhị phân: Protocol Buffers và MessagePack nhỏ hơn và phân tích nhanh hơn JSON nhưng con người không thể đọc được. File model ONNX được lưu dưới dạng các message Protocol Buffers.










