UltKit

Công cụ định dạng & kiểm tra JSON

Dán JSON vào để định dạng cho dễ đọc, rút gọn hoặc sắp xếp khóa. Nếu JSON không phân tích được, công cụ sẽ hiển thị dòng và cột nơi trình phân tích dừng lại, kèm dấu chỉ ngay dưới chỗ lỗi, nhờ vậy chỉ mất vài giây để tìm ra một dấu phẩy bị thiếu trong phản hồi dài 3.000 dòng.

Kiểu xuất

0 ký tự · 0 từ · 0 dòng

0 ký tự · 0 từ · 0 dòng

Chạy hoàn toàn trong tab trình duyệt này. Văn bản của bạn không bao giờ được tải lên hay lưu trữ.

Các kiểu giá trị JSON

RFC 8259 chỉ cho phép đúng các giá trị này. Object và array có thể lồng nhau; mọi giá trị khác là nút lá.

KiểuVí dụQuy tắc
Object{"id": 7, "tags": ["a"]}Khóa phải là chuỗi đặt trong dấu nháy kép; các thành phần cách nhau bằng dấu phẩy, không có dấu phẩy thừa ở cuối.
Array[1, "two", null]Danh sách có thứ tự gồm các giá trị bất kỳ, cho phép trộn nhiều kiểu.
Chuỗi (string)"caf\u00e9 \"quoted\""Chỉ dùng dấu nháy kép; ký tự điều khiển phải được thoát; chuỗi thoát \u dùng bốn chữ số hex.
Số (number)-12.5e3Chỉ hệ thập phân: dấu trừ tùy chọn, không có số 0 ở đầu, phần thập phân và số mũ tùy chọn. Không có NaN hay Infinity.
Hằng: true, false, nulltrueViết thường, không đặt trong dấu nháy.

Những gì trình phân tích từ chối

Mỗi đầu vào dưới đây đã được đưa qua chính hàm JSON.parse mà công cụ định dạng sử dụng khi trang này được tạo.

Đầu vàoVấn đềJSON.parse
{"a": 1,}Dấu phẩy thừa ở cuốiTừ chối
{'a': 1}Chuỗi trong dấu nháy đơnTừ chối
{"a": 1 /* note */}Chú thíchTừ chối
{a: 1}Khóa không có dấu nháyTừ chối
{"n": NaN}NaN không phải là số JSONTừ chối
{"n": 012}Số 0 ở đầuTừ chối
{"n": 0x1F}Số thập lục phânTừ chối

Chuỗi thoát trong chuỗi JSON

Ký tựCách viết trong JSON
Dấu nháy kép"\""
Dấu gạch chéo ngược"\\"
Xuống dòng (line feed)"\n"
Tab"\t"
Về đầu dòng (carriage return)"\r"
Ký tự điều khiển U+0001"\u0001"
Dấu gạch chéo (thoát là tùy chọn)"/"
Chữ cái ngoài ASCII (không cần thoát)"é"

Các quy tắc của một tài liệu JSON hợp lệ

JSON được quy định bởi RFC 8259 (về bản chất giống với ECMA-404). Một tài liệu chỉ là một giá trị duy nhất: đối tượng, mảng, chuỗi, số, true, false hoặc null. Khóa của đối tượng luôn là chuỗi đặt trong dấu nháy kép. Chuỗi chỉ dùng dấu nháy kép và phải thoát dấu nháy, dấu gạch chéo ngược và mọi ký tự điều khiển dưới U+0020; vì vậy tab và ký tự xuống dòng bên trong chuỗi được viết là \t và \n. RFC 8259 cũng yêu cầu JSON trao đổi giữa các hệ thống phải dùng UTF-8.

Số ở dạng thập phân: không có số 0 đứng đầu, không dùng hệ thập lục phân, không có NaN hay Infinity, và không có dấu cộng phía trước. Định dạng này không có chú thích và không cho phép dấu phẩy thừa ở cuối. Hai quy tắc cuối gây ra phần lớn lỗi thực tế, vì đối tượng literal trong JavaScript, JSON5 và nhiều file cấu hình đều cho phép cả hai. Bảng tham chiếu bên dưới được tạo bằng cách đưa từng lỗi phổ biến vào chính trình phân tích mà công cụ định dạng sử dụng.

Định dạng đẹp, rút gọn, sắp xếp

Định dạng đẹp (pretty-print) thêm ngắt dòng và thụt lề để cấu trúc dễ đọc; hai dấu cách là kiểu phổ biến nhất trong các dự án JavaScript, bốn dấu cách là lựa chọn thường gặp với json.dumps(indent=4) của Python, còn tab cho phép mỗi người đọc tự chọn độ rộng. Rút gọn (minify) loại bỏ mọi khoảng trắng không cần thiết, giúp giảm dung lượng dữ liệu API và đưa tài liệu vào một dòng để dùng trong log hoặc biến môi trường.

Sắp xếp khóa sẽ xếp các thành viên của mọi đối tượng theo thứ tự bảng chữ cái, theo cách đệ quy. Theo định nghĩa, đối tượng JSON không có thứ tự nên việc sắp xếp không làm đổi ý nghĩa, nhưng giúp so sánh hai tài liệu từ các hệ thống khác nhau dễ hơn nhiều. Lưu ý rằng khi phân tích, số được chuyển thành kiểu double của JavaScript: các số nguyên lớn hơn 2^53 (9.007.199.254.740.992), chẳng hạn một số ID cơ sở dữ liệu, sẽ mất độ chính xác khi định dạng lại, nên hãy giữ chúng dưới dạng chuỗi.

Từ JSON sang các định dạng khác

Tài liệu đã định dạng dễ đọc hơn, nhưng đôi khi bạn cần nó ở dạng khác. Một mảng các đối tượng có thể thành bảng tính bằng chuyển JSON sang CSV, còn công cụ chuyển đổi dữ liệu chuyển nguyên file giữa JSON, XML, YAML và CSV.

Câu hỏi thường gặp

Vì sao công cụ định dạng từ chối JSON có chú thích?
JSON chuẩn không có cú pháp chú thích; RFC 8259 cố ý bỏ qua. Hãy xóa các chú thích, hoặc giữ file ở dạng JSONC hay JSON5 nếu công cụ đọc file hỗ trợ các định dạng đó.
Lỗi JSON "Unexpected token" nghĩa là gì?
Trình phân tích gặp một ký tự không được phép xuất hiện ở vị trí đó, chẳng hạn dấu nháy đơn, dấu phẩy thừa trước } hoặc khóa không có dấu nháy. Dòng và cột hiển thị chỉ đúng vào ký tự đó.
Sắp xếp khóa có làm thay đổi dữ liệu không?
Không. Thứ tự các thành viên của đối tượng không mang ý nghĩa trong JSON, nên tài liệu sau khi sắp xếp vẫn tương đương. Thứ tự trong mảng có ý nghĩa và không bao giờ bị thay đổi.
Vì sao một số dài bị thay đổi sau khi định dạng?
JavaScript lưu số dưới dạng số thực 64 bit, chỉ biểu diễn chính xác số nguyên đến 2^53. ID lớn hơn sẽ bị làm tròn khi phân tích; hãy truyền chúng dưới dạng chuỗi để giữ nguyên mọi chữ số.
Có thể định dạng file JSON thay vì dán nội dung không?
Mở file bằng bất kỳ trình soạn thảo văn bản nào, chọn tất cả rồi dán vào đây. Các file rất lớn, hàng chục megabyte, có thể làm tab chạy chậm khi ô nhập văn bản hiển thị chúng.