JSON—JavaScript Object Notation—là định dạng dựa trên văn bản phổ biến để trao đổi dữ liệu có cấu trúc. Nó được chuẩn hóa bởi cả IETF với tên gọi RFC 8259 và bởi Ecma International với tên gọi ECMA-404, cùng nhau xác định cú pháp nhỏ gọn, không phụ thuộc vào ngôn ngữ, cung cấp năng lượng cho các API, nhật ký, cấu hình và cơ sở dữ liệu hiện đại.
Một giá trị JSON là một đối tượng, mảng, chuỗi, số, hoặc một trong các giá trị chữ true, false, hoặc null; các đối tượng ánh xạ chuỗi tới các giá trị và các mảng chứa các giá trị có thứ tự—với khoảng trắng không đáng kể được phép xung quanh các ký tự cấu trúc (RFC 8259, ECMA-404). Mặc dù JSON có nguồn gốc từ JavaScript, nó độc lập với ngôn ngữ và được hỗ trợ ở hầu hết mọi nơi (MDN: JSON). Trên đường truyền, mã hóa trên thực tế và được khuyến nghị là UTF-8 (RFC 8259 §8.1). Để tăng cường tính tương thích, hồ sơ I-JSON (RFC 7493) thắt chặt các quy tắc về mã hóa và phạm vi số.
Trong JavaScript, đối tượng toàn cục JSON cung cấp hai công cụ chính:JSON.parse (với một reviver tùy chọn) và JSON.stringify (với replacer/spacing để in đẹp), như được ghi lại trên MDN (parse, stringify).
Ngữ pháp số của JSON là thập phân, nhưng đặc tả không quy định độ chính xác hoặc sự phân biệt số nguyên/số thực. Các triển khai tự chọn cách biểu diễn chúng (RFC 8259 §6). Trong JavaScript và Node.js, Number là độ chính xác kép IEEE-754, có nghĩa là chỉ các số nguyên trong [−(2^53−1), 2^53−1] mới thực sự an toàn—xem Number.MAX_SAFE_INTEGER và kiểu BigInt. Đây là lý do tại sao các API công khai thường gửi ID dưới dạng chuỗi và xác thực "số nguyên an toàn" một cách rõ ràng.
Khi việc sử dụng trở nên phổ biến, các tiêu chuẩn đã xuất hiện để định vị và sửa đổi JSON tại chỗ. JSON Pointer (RFC 6901) là một cú pháp nhỏ gọn, được phân tách bằng dấu gạch chéo để định vị các giá trị (ví dụ: /a/b/0) với các quy tắc thoát cho ~ và /. JSON Patch (RFC 6902) mô hình hóa các bản cập nhật một phần dưới dạng các thao tác có thứ tự (add, remove, replace, move, copy, test) và được truyền dưới dạng application/json-patch+json. Đối với các khác biệt đơn giản hơn, JSON Merge Patch (RFC 7386) sử dụng một phép hợp nhất có hình dạng tài liệu: các trường hiện có được thêm/thay thế; đặt một trường thành null sẽ xóa nó. Nhiều framework hỗ trợ một hoặc cả hai hình thức này ngay từ đầu.
Bản thân JSON không có lược đồ, nhưng các hệ sinh thái dựa vào lược đồ để xác thực, tài liệu và tạo mã. Họ JSON Schema 2020-12 chỉ định các ràng buộc như type, properties, items, và các từ khóa σύνθεσης, và nó phù hợp với OpenAPI 3.1. Đối với các quy trình làm việc tập trung vào việc tạo mã, JSON Type Definition (RFC 8927) cung cấp một ngôn ngữ có chủ ý ít biểu cảm hơn, có thể ánh xạ một cách có thể dự đoán được tới các hệ thống kiểu chính thống.
JSON cổ điển mong đợi một văn bản hoàn chỉnh cho mỗi tải trọng, điều này làm phức tạp việc truyền phát nhật ký và các phản hồi kéo dài. Hai mẫu giúp ích:
application/json-seq.Khi băng thông hoặc tốc độ chiếm ưu thế, các định dạng "JSON nhị phân" bảo tồn mô hình dữ liệu của JSON trong khi đánh đổi khả năng đọc của con người để lấy hiệu quả:
Bởi vì JSON chỉ là văn bản, hầu hết các rủi ro đến từ cách bạn vận chuyển và xử lý nó:
<script> với một cuộc gọi lại) là một giải pháp thay thế trước CORS cho các yêu cầu từ các nguồn khác nhau nhưng nguy hiểm—nó thực thi tập lệnh tùy ý. Ưu tiên CORS với các phản hồi application/json thực (OWASP: Lạm dụng JSONP).JSON ra mắt dưới RFC 4627 (2006); loại phương tiện đã đăng ký là application/json, đặc tả của nó hiện trỏ đến RFC 8259. Các tham số "charset" trên các phản hồi JSON thường không cần thiết vì UTF-8 là mặc định trên internet công cộng.
Các nhà phát triển thường muốn có các bình luận, dấu phẩy ở cuối hoặc các chuỗi được trích dẫn đơn trong các cấu hình. Điều đó nằm ngoài JSON tiêu chuẩn, nhưng JSON5 cung cấp một siêu tập hợp được ghi chép đầy đủ cho các tệp do con người chỉnh sửa. Tránh gửi JSON5 qua các API công khai trừ khi bạn kiểm soát cả hai đầu.
Thành công của JSON đến từ một bề mặt nhỏ, hỗ trợ ngôn ngữ rộng rãi và một vòng các tiêu chuẩn liền kề—con trỏ, vá, lược đồ, chuỗi—bao gồm các thực tế lộn xộn của các hệ thống phân tán. Hiểu các nguyên tắc cơ bản (cú pháp, mã hóa, số), dựa vào các tiêu chuẩn liền kề phù hợp, và nó sẽ tiếp tục mang lại lợi ích trên các ngăn xếp và dịch vụ (RFC 8259, ECMA-404, RFC 6901, RFC 6902, RFC 7386, JSON Schema, JTD, RFC 7464, NDJSON).
JSON (JavaScript Object Notation) là định dạng trao đổi dữ liệu nhẹ, dễ đọc và viết cho con người và dễ phân tích cú pháp và tạo ra cho máy. Nó được sử dụng rộng rãi để truyền dữ liệu trong các ứng dụng web.
Định dạng JSON làm cho nó có thể đọc được bởi con người bằng cách thêm thụt lề và ngắt dòng thích hợp. Điều này đặc biệt hữu ích khi làm việc với dữ liệu JSON đã được rút gọn hoặc nén, gỡ lỗi hoặc xem xét phản hồi API.
Xác thực JSON kiểm tra xem chuỗi JSON của bạn có tuân thủ theo đặc tả JSON hay không. Nó xác định các lỗi cú pháp như thiếu dấu phẩy, dấu ngoặc chưa đóng hoặc dấu ngoặc kép không đúng cách, giúp bạn phát hiện lỗi sớm.
Chế độ xem mã hiển thị JSON đã định dạng dưới dạng văn bản với đánh dấu cú pháp, tương tự như cách nó xuất hiện trong trình soạn thảo mã. Chế độ xem cây trình bày JSON dưới dạng cấu trúc tương tác, có thể thu gọn nơi bạn có thể mở rộng và thu gọn các đối tượng và mảng lồng nhau.
Có! Tất cả định dạng và xác thực JSON đều diễn ra hoàn toàn trong trình duyệt của bạn. Dữ liệu của bạn không bao giờ rời khỏi máy tính của bạn, đảm bảo quyền riêng tư và bảo mật hoàn toàn.
Có, bạn có thể tải lên tệp JSON bằng nút 'Mở tệp'. Công cụ sẽ đọc tệp và hiển thị đầu ra đã định dạng ngay lập tức.
Các lỗi JSON phổ biến bao gồm: thiếu dấu phẩy giữa các cặp khóa-giá trị, sử dụng dấu ngoặc đơn thay vì dấu ngoặc kép cho chuỗi, dấu phẩy ở cuối, dấu ngoặc hoặc dấu ngoặc nhọn chưa đóng và khóa không có dấu ngoặc kép.
Có, sử dụng nút 'Sao chép' để sao chép JSON đã định dạng vào khay nhớ tạm của bạn. Điều này hữu ích để dán JSON đã làm sạch vào mã hoặc tài liệu của bạn.