Định dạng và kiểm tra JSON: đọc thông báo lỗi, sửa sáu lỗi cú pháp hay gặp
Công cụ nhận đoạn JSON bạn dán vào, phân tích cú pháp rồi in lại theo thụt lề hai hoặc bốn dấu cách, hoặc nén về một dòng. Nếu cú pháp sai, nó hiện nguyên thông báo lỗi của trình duyệt kèm vị trí ký tự để bạn biết cần soi chỗ nào.
Tính năng nổi bật
- Ô dán mã bên trái và khối kết quả bên phải, hiển thị bằng phông chữ đơn cách
- Nút định dạng in lại JSON theo cấu trúc lồng nhau cho dễ đọc
- Chọn thụt lề hai hoặc bốn dấu cách bằng hai nút bấm
- Nút nén ép toàn bộ JSON về một dòng, bỏ mọi khoảng trắng thừa
- Kiểm tra cú pháp ngay khi bấm, sai thì hiện khối cảnh báo màu đỏ
- Hiện nguyên thông báo lỗi của bộ phân tích, thường kèm vị trí ký tự gây lỗi
- Nút chép kết quả vào bộ nhớ tạm
- Chạy hoàn toàn trên trình duyệt, dữ liệu bạn dán vào không gửi lên máy chủ
Một đoạn JSON nén một dòng thì không ai đọc nổi
Phản hồi từ một dịch vụ web gần như luôn được trả về ở dạng nén, tức toàn bộ dữ liệu nằm trên một dòng duy nhất không có khoảng trắng. Với vài chục khóa thì còn dò được, nhưng với một phản hồi có cấu trúc lồng ba bốn tầng và một mảng vài chục phần tử, đọc trực tiếp là chuyện bất khả thi. Bạn cần thấy cấu trúc phân cấp để biết một trường nằm ở đâu, mảng nào chứa gì và thiếu khóa nào. Chiều ngược lại cũng cần: khi phải đặt một đoạn JSON vào biến môi trường, vào ô cấu hình một dòng, hoặc vào tham số của một lệnh gọi, bạn cần bản nén. Thêm vào đó, chính bước phân tích cú pháp đóng vai trò kiểm tra: nếu đoạn JSON bạn viết tay có lỗi, công cụ sẽ chỉ ra ngay thay vì để bạn phát hiện sau khi triển khai và thấy hệ thống báo lỗi chung chung.
Lợi ích khi sử dụng
- Nhìn ra cấu trúc lồng nhau của một phản hồi chỉ trong một lần bấm
- Vừa định dạng vừa kiểm tra cú pháp trong cùng một thao tác
- Có sẵn cả chiều ngược lại là nén về một dòng khi cần dán vào ô cấu hình
- Thông báo lỗi kèm vị trí ký tự nên khoanh vùng nhanh hơn dò tay
- Dữ liệu không rời khỏi trình duyệt nên dùng được với phản hồi nội bộ
Cách định dạng một đoạn JSON
- 1Dán đoạn JSON cần xử lý vào ô bên trái, dán được cả bản nén một dòng lẫn bản đã xuống dòng sẵn.
- 2Chọn mức thụt lề hai hoặc bốn dấu cách tùy quy ước của dự án bạn.
- 3Bấm nút định dạng để in lại theo cấu trúc, hoặc bấm nút nén nếu bạn cần bản một dòng.
- 4Nếu khối kết quả hiện cảnh báo đỏ, đọc thông báo lỗi và tìm tới vị trí ký tự mà nó nêu.
- 5Sửa xong thì chạy lại, khi kết quả hiện ra thì bấm nút chép để lấy bản đã xử lý.
Định dạng và nén: dùng cái nào lúc nào
Bản định dạng dành cho mắt người: mỗi khóa một dòng, các cấp lồng nhau thụt vào, nhờ đó bạn thấy ngay cấu trúc và biết một trường thuộc về đối tượng nào. Đây là dạng nên dùng khi đọc phản hồi để gỡ lỗi, khi lưu tệp cấu hình vào kho mã nguồn để còn xem được lịch sử thay đổi từng dòng, và khi dán vào tài liệu cho người khác đọc. Bản nén dành cho máy: bỏ hết khoảng trắng và xuống dòng, dung lượng giảm đáng kể với các tệp lớn. Đây là dạng nên dùng khi truyền qua mạng, khi đặt vào biến môi trường vốn không nhận nhiều dòng, hoặc khi đưa vào tham số một lệnh. Về mức thụt lề, hai dấu cách là quy ước phổ biến nhất trong hệ sinh thái JavaScript và giúp cấu trúc sâu không bị đẩy quá xa sang phải, còn bốn dấu cách dễ nhìn hơn với cấu trúc nông. Một điểm cần nhớ: bản nén và bản định dạng hoàn toàn tương đương về dữ liệu, mọi thư viện đều đọc được cả hai, nên đừng bao giờ sửa tay bản nén mà hãy định dạng ra, sửa, rồi nén lại.
Đọc thông báo lỗi và tìm đúng chỗ sai
Thông báo hiện trong khối đỏ là thông báo gốc của bộ phân tích trong trình duyệt, nên nó bằng tiếng Anh và mỗi trình duyệt có cách diễn đạt hơi khác. Phần hữu ích nhất thường là con số vị trí đi kèm, cho biết lỗi xảy ra ở ký tự thứ bao nhiêu tính từ đầu chuỗi. Cách dùng con số này: dán đoạn JSON vào một trình soạn thảo có hiển thị vị trí con trỏ, dùng chức năng nhảy tới vị trí, hoặc đơn giản là ước lượng bằng cách chia cho độ dài trung bình mỗi dòng. Lưu ý là vị trí báo lỗi thường nằm ngay sau chỗ sai thật chứ không trùng với nó, vì bộ phân tích chỉ nhận ra có vấn đề khi gặp ký tự không hợp lệ tiếp theo. Ví dụ khi bạn quên một dấu phẩy giữa hai cặp khóa giá trị, vị trí báo lỗi sẽ rơi vào dấu nháy mở đầu khóa kế tiếp chứ không phải chỗ thiếu dấu phẩy. Vì vậy hãy soi từ vị trí báo lỗi ngược lên trên vài dòng thay vì chỉ nhìn đúng ký tự đó.
Sáu lỗi cú pháp chiếm gần hết số lần báo lỗi
Thứ nhất là dấu phẩy thừa sau phần tử cuối cùng của một đối tượng hoặc một mảng; JavaScript cho phép nhưng JSON thì không. Thứ hai là dùng dấu nháy đơn thay vì dấu nháy kép; chuẩn JSON chỉ chấp nhận nháy kép cho cả tên khóa lẫn giá trị chuỗi. Thứ ba là tên khóa không bọc trong dấu nháy, thói quen mang từ cách viết đối tượng trong JavaScript sang. Thứ tư là chú thích: JSON không có chú thích dưới bất kỳ hình thức nào, dù nhiều tệp cấu hình quen thuộc lại cho phép nhờ dùng biến thể mở rộng. Thứ năm là các giá trị chỉ tồn tại trong JavaScript như không xác định, không phải số, hay vô cực; JSON chỉ có chuỗi, số, giá trị luận lý, rỗng, đối tượng và mảng. Thứ sáu là ký tự xuống dòng thật nằm bên trong một chuỗi; muốn có xuống dòng trong chuỗi, bạn phải viết bằng chuỗi thoát chứ không được nhấn phím Enter. Ngoài sáu lỗi này, một nguyên nhân âm thầm nữa là ký tự đánh dấu thứ tự byte lọt vào đầu tệp khi lưu bằng một số trình soạn thảo trên Windows.
Ba thay đổi âm thầm khi JSON đi qua bước phân tích rồi in lại
Thứ nhất là chuỗi thoát. Nếu dữ liệu gốc viết chữ tiếng Việt dưới dạng chuỗi thoát bốn chữ số hệ mười sáu, bản in ra sẽ hiện thành chữ có dấu bình thường. Đây thường là điều bạn muốn vì dễ đọc hơn hẳn, nhưng nếu hệ thống nhận dữ liệu của bạn đòi dạng thoát thì đừng dùng bản đã in lại. Thứ hai là số. Bộ phân tích đưa mọi số về kiểu số dấu phẩy động của JavaScript, vốn chỉ giữ chính xác số nguyên tới khoảng chín triệu tỷ; một mã định danh dài hai mươi chữ số sẽ bị làm tròn và các chữ số cuối biến thành số không mà không có cảnh báo nào. Nếu dữ liệu của bạn có mã định danh rất dài, hãy yêu cầu bên cung cấp trả về dưới dạng chuỗi. Số ghi theo ký hiệu khoa học hoặc có số không thừa ở đầu cũng bị chuẩn hóa lại. Thứ ba là thứ tự khóa: các khóa có tên là số nguyên bị đẩy lên đầu và sắp theo thứ tự tăng dần, các khóa còn lại giữ nguyên thứ tự khai báo. Chuyện này chỉ gặp với dữ liệu dùng số làm tên khóa nhưng khi gặp thì rất khó hiểu.
Công cụ không làm gì, và những lưu ý khi dán dữ liệu thật
Công cụ này chỉ làm hai việc là in lại và nén. Nó không có khung cây để mở gập từng nhánh, không có ô tìm kiếm theo đường dẫn khóa, không tô màu theo kiểu dữ liệu, không sắp xếp khóa theo bảng chữ cái, không nhận tệp tải lên và không xuất tệp. Với phản hồi rất lớn, khối kết quả sẽ dài và bạn phải cuộn nhiều; khi đó một trình soạn thảo mã có chức năng gập khối vẫn tiện hơn. Nó cũng không kiểm tra dữ liệu có đúng cấu trúc mà hệ thống của bạn mong đợi hay không; muốn kiểm tra kiểu và trường bắt buộc, bạn cần một lược đồ mô tả dữ liệu và một công cụ đối chiếu riêng. Về dữ liệu, mọi thứ chạy trong trình duyệt và không có lời gọi mạng nào, nhưng vẫn nên tạo thói quen thay các giá trị nhạy cảm bằng chuỗi giả trước khi dán, nhất là mã truy cập, khóa bí mật và thông tin cá nhân của khách hàng, vì nội dung này rất dễ theo bạn đi tiếp vào ảnh chụp màn hình hay phiếu công việc.
Câu hỏi thường gặp (FAQ)
Vì sao JSON của tôi báo lỗi ở dấu ngoặc mà tôi nhìn thấy vẫn đúng?
Vì vị trí báo lỗi thường nằm ngay sau chỗ sai thật. Bộ phân tích chỉ nhận ra có vấn đề khi gặp ký tự không hợp lệ tiếp theo, nên khi bạn quên một dấu phẩy, lỗi lại được báo ở đầu cặp khóa giá trị kế tiếp. Hãy soi ngược lên vài dòng phía trên vị trí đó.
JSON có cho phép viết chú thích không?
Không, chuẩn JSON không có chú thích dưới bất kỳ hình thức nào. Một số tệp cấu hình quen thuộc cho phép viết chú thích là vì công cụ đọc chúng dùng biến thể mở rộng chứ không phải JSON thuần. Nếu cần ghi chú, hãy thêm một khóa riêng có tên như ghi chú và đặt nội dung vào đó.
Dùng dấu nháy đơn có được không?
Không. Chuẩn chỉ chấp nhận dấu nháy kép cho cả tên khóa lẫn giá trị chuỗi. Đây là lỗi hay gặp khi chép một đối tượng từ mã JavaScript sang, vì trong JavaScript thì nháy đơn hợp lệ và tên khóa còn không cần nháy. Hãy dùng chức năng thay thế để đổi toàn bộ sang nháy kép.
Mã định danh dài của tôi bị đổi vài chữ số cuối, vì sao?
Vì bộ phân tích đưa mọi số về kiểu số dấu phẩy động, vốn chỉ giữ chính xác các số nguyên tới khoảng chín triệu tỷ. Số dài hơn bị làm tròn mà không cảnh báo. Cách xử lý duy nhất là để mã định danh dưới dạng chuỗi trong dấu nháy ngay từ phía tạo ra dữ liệu.
Vì sao thứ tự các khóa bị đổi sau khi định dạng?
Chỉ xảy ra khi có khóa mang tên là số nguyên. Theo quy tắc của ngôn ngữ, các khóa dạng số nguyên bị đẩy lên đầu và sắp tăng dần, còn các khóa chữ giữ nguyên thứ tự khai báo. Nếu thứ tự quan trọng với bạn, hãy đổi tên khóa sang dạng có tiền tố chữ.
Chuỗi thoát tiếng Việt biến thành chữ có dấu, có sao không?
Về dữ liệu thì hoàn toàn tương đương, hai cách viết cho cùng một chuỗi và mọi thư viện đều hiểu như nhau. Bản in ra dễ đọc hơn hẳn. Chỉ cần lưu ý nếu hệ thống nhận dữ liệu của bạn bắt buộc dùng dạng thoát vì lý do bảng mã, khi đó đừng dùng bản đã in lại.
Nên chọn thụt lề hai hay bốn dấu cách?
Hai dấu cách là quy ước phổ biến nhất trong hệ sinh thái JavaScript và giúp cấu trúc lồng sâu không bị đẩy quá xa sang phải. Bốn dấu cách dễ nhìn hơn với cấu trúc nông và hợp với các dự án theo quy ước đó. Quan trọng là thống nhất trong cùng một kho mã nguồn.
Nén JSON có làm mất dữ liệu không?
Không. Bản nén và bản định dạng hoàn toàn tương đương, chỉ khác ở khoảng trắng vốn không mang ý nghĩa trong JSON. Mọi thư viện đều đọc được cả hai. Điều nên tránh là sửa tay trực tiếp trên bản nén, vì rất dễ đặt nhầm dấu phẩy hoặc dấu ngoặc.
Có tải tệp JSON lên hay tải kết quả về được không?
Không, công cụ chỉ nhận nội dung dán vào ô văn bản và trả kết quả qua nút chép. Với tệp trên máy, hãy mở bằng trình soạn thảo rồi chép sang. Với phản hồi từ một dịch vụ, lấy bằng chức năng sao chép phản hồi trong tab mạng của công cụ dành cho nhà phát triển.
Công cụ có kiểm tra dữ liệu đúng cấu trúc mong đợi không?
Không. Nó chỉ kiểm tra cú pháp, tức đoạn văn bản có phải JSON hợp lệ hay không. Việc kiểm tra có đủ trường bắt buộc, kiểu dữ liệu có đúng, giá trị có nằm trong khoảng cho phép hay không đòi hỏi một lược đồ mô tả dữ liệu và công cụ đối chiếu riêng.
Dán JSON có chứa mã truy cập vào đây có an toàn không?
Về kỹ thuật thì mọi thứ chạy trong trình duyệt và không có lời gọi mạng nào. Nhưng vẫn nên thay các giá trị nhạy cảm bằng chuỗi giả trước khi dán, vì nội dung này rất dễ theo bạn đi tiếp vào ảnh chụp màn hình, vào phiếu công việc hay vào tin nhắn nhóm.
Vì sao tệp JSON của tôi báo lỗi ngay ký tự đầu tiên?
Nguyên nhân hay gặp nhất là ký tự đánh dấu thứ tự byte vô hình lọt vào đầu tệp khi lưu bằng một số trình soạn thảo trên Windows. Hãy mở tệp bằng trình soạn thảo mã và lưu lại theo bảng mã UTF-8 không kèm dấu đánh dấu, hoặc xóa ký tự đầu tiên rồi thử lại.
Từ khóa liên quan
- format json online
- kiểm tra json hợp lệ
- json formatter tiếng việt
- nén json về một dòng
- lỗi cú pháp json
- dấu phẩy thừa trong json
- json không cho phép comment
- json và javascript object khác nhau
- thụt lề 2 hay 4 dấu cách
- đọc phản hồi api dễ hơn
- số quá lớn trong json bị sai
- chuỗi thoát unicode trong json
- byte order mark lỗi json
- làm đẹp json
- json beautifier
- json validator online
- định dạng file cấu hình json
- json là gì
- chuẩn hóa json trước khi so sánh
- công cụ json miễn phí
