JSON Formatter và Validator
Dán JSON bất kỳ vào ô phía trên, JSON formatter và validator này sẽ kiểm tra dữ liệu ngay khi bạn nhập. Dữ liệu hợp lệ được định dạng đẹp với mức thụt lề bạn chọn, hoặc rút gọn thành một dòng duy nhất. Dữ liệu không hợp lệ nhận thông báo lỗi chính xác kèm dòng và cột, một đoạn trích được tô sáng và, với các lỗi thường gặp, cách sửa chỉ bằng một cú nhấp. Mọi thứ chạy trong trình duyệt của bạn, nên phản hồi API, tệp cấu hình và dữ liệu xuất ra không bao giờ rời khỏi máy tính của bạn.
JSON formatter này làm được gì
- Định dạng JSON (beautify) với 2 dấu cách, 4 dấu cách hoặc tab. Kết quả giữ nguyên thứ tự khóa ban đầu, trừ khi bạn đánh dấu Sắp xếp khóa.
- Rút gọn JSON (minify) bằng cách bỏ mọi dấu cách và dấu xuống dòng. Chỉ số kích thước dưới kết quả cho biết bạn đã tiết kiệm được bao nhiêu byte.
- Kiểm tra JSON trực tiếp theo RFC 8259, tiêu chuẩn JSON hiện hành. Dòng trạng thái chuyển sang màu xanh ngay khi tài liệu đúng.
- Tự động sửa lỗi thường gặp: dấu phẩy thừa, dấu nháy đơn, khóa không có dấu nháy, chú thích, giá trị kiểu Python như
True,NonevàNaN, các số như.5hoặc+1. - Mở tệp bằng nút Mở tệp hoặc kéo thả tệp
.jsonvào ô nhập, sau đó tải kết quả xuống hoặc đưa nó trở lại ô nhập để xử lý thêm một lượt.
Vì sao thông báo lỗi quan trọng hơn màu đỏ
Hầu hết các trình kiểm tra trực tuyến chỉ báo rằng có gì đó sai. Trình duyệt cũng không khá hơn là bao: JSON.parse trong Chrome báo Unexpected token } in JSON at position 148, còn Firefox báo expected property name or '}', và cả hai đều không cho biết cần xem dòng nào. Công cụ này có bộ phân tích cú pháp (parser) riêng, ghi nhớ vị trí bắt đầu của từng token. Khi dừng lại, nó cho bạn biết dòng và cột, trích đoạn dòng đó với dấu mũ ngay dưới ký tự gây lỗi, cùng một gợi ý dễ hiểu như Có thể đang thiếu dấu phẩy giữa hai thuộc tính. Nút Đi tới lỗi đưa con trỏ thẳng đến vị trí đó trong ô nhập.
Những lỗi thường gặp nhất mà chúng tôi thấy trong các tài liệu được dán vào:
| Đầu vào | Vấn đề | JSON đúng |
|---|---|---|
{'name': 'Ada'} | dấu nháy đơn | {"name": "Ada"} |
{name: "Ada"} | khóa không có dấu nháy | {"name": "Ada"} |
[1, 2, 3,] | dấu phẩy thừa | [1, 2, 3] |
{"a": 1 "b": 2} | thiếu dấu phẩy | {"a": 1, "b": 2} |
{"ok": True} | giá trị kiểu Python | {"ok": true} |
{"x": 007} | chữ số 0 ở đầu | {"x": 7} hoặc {"x": "007"} |
// comment | chú thích | không được phép trong JSON |
Nút Sửa giúp tôi xử lý được tất cả các lỗi trên, trừ thiếu dấu phẩy và chữ số 0 ở đầu. Cách sửa được thiết kế thận trọng một cách có chủ ý: nó không bao giờ đoán dấu phẩy bị thiếu nằm ở đâu, vì chèn sai chỗ sẽ làm thay đổi ý nghĩa của dữ liệu, còn 007 có thể là số 7 hoặc là một mã. Trong những trường hợp này, bạn sẽ nhận được vị trí chính xác của lỗi.
Số lớn và thứ tự khóa: những điều nhiều JSON formatter làm hỏng
Nhiều formatter hoạt động bằng cách gọi JSON.parse rồi JSON.stringify. Vòng chuyển đổi đó âm thầm làm hỏng dữ liệu. Một ID của Twitter hoặc Snowflake như 1234567890123456789 vượt quá giới hạn 2^53 của số trong JavaScript và trở thành 1234567890123456800. Giá trị 1.0 biến thành 1, còn 1e3 thành 1000. Formatter này không bao giờ chuyển số sang dạng dấu phẩy động. Nó sao chép từng giá trị đúng như khi được viết, nên kết quả là bản định dạng lại trung thực của đầu vào chứ không phải một cách diễn giải lại. Điều tương tự áp dụng cho chuỗi escape bên trong chuỗi: "\u00e9" vẫn giữ nguyên là "\u00e9" và không bị đổi thành "é".
Thứ tự khóa cũng được giữ nguyên. Đặc tả JSON nói rằng các thành phần của đối tượng không có thứ tự, nhưng tệp cấu hình, test fixture và code review sẽ dễ đọc hơn nhiều khi thứ tự ổn định. Nếu bạn muốn một dạng chuẩn hóa, chẳng hạn để so sánh hai phản hồi API trong công cụ diff, hãy bật Sắp xếp khóa và cả hai tài liệu sẽ liệt kê thuộc tính theo thứ tự bảng chữ cái ở mọi cấp lồng nhau.
Định dạng JSON hay rút gọn JSON: khi nào dùng cách nào
JSON được định dạng đẹp là dành cho con người. Hãy dùng nó khi bạn xem xét một phản hồi API, viết package.json, tsconfig.json hoặc tài liệu OpenAPI, hay khi lưu fixture trong một repository mà mỗi diff nên thể hiện một thay đổi trên một dòng. Hai dấu cách là quy ước trong thế giới JavaScript, bốn dấu cách phổ biến trong các dự án Python và .NET, còn tab cho phép mỗi người đọc tự chọn độ rộng.
JSON rút gọn là dành cho máy. Khoảng trắng thường chiếm 20 đến 40 phần trăm một tài liệu đã định dạng, nên loại bỏ nó giúp giảm dung lượng dữ liệu gửi tới trình duyệt, giá trị lưu trong Redis hoặc trong một cột cơ sở dữ liệu, và các thuộc tính data-* nhúng trong HTML. Gzip thu hẹp được một phần khoảng cách đó, nhưng bản rút gọn sau khi nén vẫn nhỏ hơn. Chỉ số kích thước dưới kết quả cho thấy chênh lệch chính xác với tài liệu của bạn.
Làm việc với JSON trong terminal và trình soạn thảo
Với những tệp bạn xử lý thường xuyên, công cụ dòng lệnh nhanh hơn bất kỳ trang web nào. jq . file.json định dạng đẹp, jq -c . file.json rút gọn, còn python -m json.tool file.json hoạt động ở bất cứ đâu có cài Python. Visual Studio Code định dạng JSON bằng Shift+Alt+F và kiểm tra theo schema khi bạn thêm thuộc tính $schema. Trang này dành cho các trường hợp còn lại: một phản hồi sao chép từ tab Network, một dòng log, một đoạn cấu hình lấy từ wiki, hoặc kiểm tra nhanh trên máy mà bạn không thể cài đặt gì.
Công cụ liên quan trên trang này: bộ mã hóa và giải mã Base64 giải mã phần payload của JWT, vốn là JSON được mã hóa bằng Base64url. Công cụ chuyển đổi Unix timestamp biến các con số createdAt có trong hầu hết phản hồi API thành ngày giờ dễ đọc, còn bộ giải mã UUID cho biết phiên bản và dấu thời gian của các định danh trong dữ liệu của bạn. Các tiện ích khác có trong mục công cụ cho nhà phát triển.
Câu hỏi thường gặp
JSON của tôi có được tải lên máy chủ không?
Không. Việc phân tích, định dạng và sửa lỗi đều chạy hoàn toàn trong trình duyệt của bạn bằng JavaScript. Sau khi trang đã tải xong, bạn có thể ngắt kết nối mạng và công cụ vẫn tiếp tục hoạt động. Không có gì được ghi lại hay lưu trữ.Tại sao trình kiểm tra từ chối chú thích trong khi trình soạn thảo của tôi chấp nhận?
Chính tác giả của JSON, Douglas Crockford, đã cố ý loại bỏ chú thích khỏi định dạng này để ngăn việc dùng chúng làm chỉ thị cho parser. Các tệp nhưtsconfig.json hay .vscode/settings.json về mặt kỹ thuật là JSONC, một phần mở rộng của JSON mà các trình soạn thảo hỗ trợ. Các parser nghiêm ngặt trong API, cơ sở dữ liệu và hầu hết ngôn ngữ lập trình đều từ chối chúng. Nút sửa lỗi sẽ xóa chú thích để kết quả hợp lệ ở mọi nơi.
Tôi có thể định dạng JSON Lines hoặc nhiều đối tượng cùng lúc không?
Một tài liệu JSON chứa đúng một giá trị. Nếu bạn dán nhiều đối tượng phân tách bằng dấu phẩy hoặc dấu xuống dòng, trình kiểm tra sẽ dừng ở giá trị thừa đầu tiên. Hãy bọc chúng trong dấu ngoặc vuông để tạo thành một mảng, rồi định dạng. Nút sửa lỗi không tự làm việc này vì nó không thể biết đầu vào có được dự định là một tài liệu hay không.Kích thước tối đa là bao nhiêu?
Không có giới hạn cố định. Tài liệu vài megabyte được định dạng trong chưa đến một giây trên máy tính xách tay. Tô sáng cú pháp được tắt khi vượt quá khoảng 400 kB để trang vẫn phản hồi nhanh, nhưng sao chép và tải xuống vẫn hoạt động bình thường.Sắp xếp khóa có làm thay đổi dữ liệu không?
Không. Theo định nghĩa, đối tượng trong JSON không có thứ tự, xem bài viết về JSON trên Wikipedia, nên parser đọc tài liệu đã sắp xếp và tài liệu gốc như cùng một giá trị. Mảng không bao giờ bị sắp xếp lại vì thứ tự của chúng là một phần của dữ liệu.Làm thế nào để escape JSON khi nhúng vào một chuỗi?
Trước tiên hãy rút gọn, sau đó escape mọi dấu gạch chéo ngược và dấu nháy kép. Nhiều ngôn ngữ hỗ trợ việc này trực tiếp:JSON.stringify(JSON.stringify(obj)) trong JavaScript hoặc json.dumps(json.dumps(obj)) trong Python tạo ra một chuỗi JSON chứa văn bản JSON.