Câu hỏi thường gặp Trình định dạng và xác thực JSON
Q: JSON formatter là gì?
A: JSON formatter là gì?
JSON formatter là một công cụ nhận dữ liệu JSON thô, đã được rút gọn hoặc định dạng kém và định dạng lại với thụt lề, ngắt dòng và khoảng trắng phù hợp để con người có thể đọc được. Hầu hết các JSON formatter cũng bao gồm xác thực, tô sáng cú pháp, phát hiện lỗi và đôi khi có thêm các tính năng như sắp xếp khóa, rút gọn và điều hướng dạng cây. Công cụ JSON formatter trực tuyến miễn phí của chúng tôi kết hợp định dạng và xác thực trong một công cụ, mang đến cho bạn kết quả đầu ra sạch sẽ, tức thì với báo cáo lỗi chi tiết.
Q: Tại sao JSON của tôi không hợp lệ?
A: Tại sao JSON của tôi không hợp lệ?
JSON không hợp lệ khi nó vi phạm các quy tắc nghiêm ngặt của đặc tả JSON. Các nguyên nhân phổ biến nhất bao gồm:
- Dấu phẩy cuối cùng sau mục cuối cùng trong một object hoặc array
- Thiếu dấu ngoặc kép xung quanh khóa object hoặc giá trị chuỗi
- Sử dụng dấu ngoặc đơn thay vì dấu ngoặc kép (dấu ngoặc đơn không hợp lệ trong JSON)
- Ký tự đặc biệt không được escape như dấu gạch chéo ngược hoặc dấu ngoặc kép không được escape bên trong chuỗi
- Giá trị không hợp lệ như
undefined,NaNhoặcInfinity(không có tương đương trong JSON) - Dấu ngoặc nhọn hoặc ngoặc vuông không khớp khi
{/}hoặc[/]không được ghép cặp đúng cách
Sử dụng trình xác thực JSON để xác định chính xác vị trí và bản chất của lỗi cú pháp. Hầu hết các trình xác thực đều báo cáo dòng, cột và thông báo lỗi mô tả cho vấn đề đầu tiên mà chúng gặp phải.
Q: Sự khác biệt giữa JSON và JavaScript object là gì?
A: Sự khác biệt giữa JSON và JavaScript object là gì?
Mặc dù cú pháp JSON bắt nguồn từ cú pháp object literal của JavaScript, nhưng chúng không giống nhau. Các điểm khác biệt chính bao gồm:
- Khóa phải được đặt trong dấu ngoặc kép -- JSON yêu cầu
{"key": "value"}, trong khi JavaScript cho phép{key: "value"}(không có dấu ngoặc kép) và{'key': 'value'}(dấu ngoặc đơn). - Giá trị chuỗi phải sử dụng dấu ngoặc kép -- JSON chỉ cho phép dấu ngoặc kép cho chuỗi. JavaScript chấp nhận cả dấu ngoặc đơn và dấu ngoặc kép.
- Không có dấu phẩy cuối cùng -- JSON cấm dấu phẩy cuối cùng sau mục cuối cùng. JavaScript cho phép điều này.
- Kiểu dữ liệu hạn chế -- JSON chỉ hỗ trợ string, number, boolean, null, object và array. JavaScript object có thể chứa function,
undefined,Date,Map,Setvà các kiểu đặc biệt khác. - Không có comment -- JSON không hỗ trợ comment. JavaScript object trong mã nguồn có thể có comment.
Điều này có nghĩa là bạn không thể chỉ viết một JavaScript object và gọi nó là JSON -- nó phải được tuần tự hóa bằng JSON.stringify() hoặc được viết theo các quy tắc JSON nghiêm ngặt.
Q: JSON có thể có comment không?
A: JSON có thể có comment không?
Không, đặc tả JSON chính thức (RFC 8259) không hỗ trợ comment. JSON được thiết kế như một định dạng trao đổi dữ liệu tối giản, độc lập với ngôn ngữ và comment đã được cố ý loại trừ để giữ cho các trình phân tích cú pháp đơn giản và nhất quán trên các ngôn ngữ.
Nếu bạn cần comment, bạn có một số lựa chọn:
- JSONC (JSON with Comments) -- Được VS Code và các công cụ khác sử dụng cho tệp cấu hình. JSONC cho phép comment dòng
//và comment khối/* */. - YAML hoặc TOML -- Các định dạng cấu hình thay thế hỗ trợ comment một cách tự nhiên.
- Metadata dựa trên quy ước -- Sử dụng một khóa như
"_comment"hoặc"//"trong các object JSON để lưu trữ ghi chú mà con người có thể đọc. Lưu ý rằng điều này sẽ thêm dữ liệu vào payload của bạn. - Loại bỏ comment trước khi phân tích cú pháp -- Sử dụng bước tiền xử lý để loại bỏ comment trước khi chuyển JSON cho trình phân tích cú pháp nghiêm ngặt.
Q: Làm thế nào để xác thực JSON trực tuyến?
Q: Làm thế nào để xác thực JSON trực tuyến?
A: Làm thế nào để xác thực JSON trực tuyến?
Việc xác thực JSON trực tuyến rất đơn giản:
- Sao chép dữ liệu JSON của bạn
- Dán vào công cụ xác thực JSON
- Nhấp vào nút xác thực hoặc định dạng
- Công cụ sẽ báo cáo JSON hợp lệ hoặc hiển thị lỗi với vị trí chính xác và mô tả vấn đề
Một trình xác thực JSON tốt nên:
- Xác thực cú pháp theo đặc tả JSON chính thức (RFC 8259)
- Hiển thị số dòng và số cột của lỗi
- Cung cấp thông báo lỗi mô tả giải thích điều gì đã sai
- Tùy chọn định dạng và làm đẹp JSON cùng lúc
- Tô sáng cú pháp với mã màu cho các kiểu dữ liệu khác nhau
Đối với dữ liệu lớn hoặc nhạy cảm, nhiều trình xác thực trực tuyến xử lý mọi thứ phía máy khách trong trình duyệt của bạn, nghĩa là dữ liệu của bạn không bao giờ rời khỏi máy của bạn.
Q: JSON đã rút gọn (minified JSON) có nghĩa là gì?
A: JSON đã rút gọn (minified JSON) có nghĩa là gì?
JSON đã rút gọn là JSON đã loại bỏ tất cả khoảng trắng không cần thiết -- dấu cách, tab, dòng mới và thụt lề đều bị loại bỏ. Kết quả là một dòng duy nhất (hoặc rất ít dòng) văn bản nhỏ gọn:
{"users":[{"id":1,"name":"Alice","roles":["admin"]}],"total":1}
JSON đã rút gọn được sử dụng trong môi trường production vì một số lý do:
- Kích thước tệp nhỏ hơn -- Có thể giảm kích thước payload từ 30-50% trở lên
- Truyền tải mạng nhanh hơn -- Ít dữ liệu cần truyền tải hơn có nghĩa là độ trễ thấp hơn
- Giảm chi phí băng thông -- Đặc biệt quan trọng đối với các API có lưu lượng truy cập cao và ứng dụng di động
Sự đánh đổi là JSON đã rút gọn về cơ bản là không thể đọc được đối với con người. Sử dụng công cụ JSON pretty print để định dạng lại JSON đã rút gọn thành cấu trúc có thể đọc được để gỡ lỗi hoặc kiểm tra.
Q: Làm thế nào để pretty print JSON trong dòng lệnh?
A: Làm thế nào để pretty print JSON trong dòng lệnh?
Một số công cụ dòng lệnh có thể pretty print JSON:
Với jq (phổ biến nhất, cần cài đặt riêng):
cat file.json | jq .
Với Python (có sẵn trên hầu hết các hệ thống):
python -m json.tool file.json
Với Node.js:
node -e "const d = require('./data.json'); console.log(JSON.stringify(d, null, 2));"
Với curl (pretty print phản hồi API):
curl https://api.example.com/data | jq .
Công cụ jq được khuyến nghị nhờ đầu ra có màu, khả năng truy vấn và xử lý lỗi mạnh mẽ.
Q: JSON Schema là gì?
A: JSON Schema là gì?
JSON Schema là một từ vựng cho phép bạn chú thích và xác thực tài liệu JSON. Nó định nghĩa cấu trúc, kiểu dữ liệu và các ràng buộc mà một tài liệu JSON phải thỏa mãn. Hãy coi nó như một hợp đồng hoặc đặc tả cho dữ liệu JSON của bạn.
Các khả năng chính của JSON Schema:
- Xác thực kiểu -- Chỉ định liệu một giá trị phải là string, number, boolean, array, object hay null
- Trường bắt buộc -- Đánh dấu một số thuộc tính là bắt buộc
- Ràng buộc giá trị -- Đặt giá trị tối thiểu/tối đa, mẫu chuỗi (regex) và các giá trị được phép (enum)
- Xác thực array -- Kiểm soát độ dài array, kiểu phần tử và tính duy nhất
- Xác thực lồng nhau -- Định nghĩa schema cho các object và array lồng nhau
- Xác thực có điều kiện -- Áp dụng các quy tắc khác nhau dựa trên giá trị của các trường khác
Ví dụ JSON Schema:
{
"$schema": "https://json-schema.org/draft/2020-12/schema",
"type": "object",
"required": ["name", "email"],
"properties": {
"name": { "type": "string", "minLength": 1 },
"email": { "type": "string", "format": "email" },
"age": { "type": "integer", "minimum": 0, "maximum": 150 }
}
}
JSON Schema thường được sử dụng để xác thực body yêu cầu API, tệp cấu hình và hợp đồng trao đổi dữ liệu giữa các dịch vụ.