Trước tiên, bạn nên biết những gì JSON là:
- Đó là ngôn ngữ thuyết bất khả tri định dạng dữ liệu trao đổi.
Cú pháp của JSON được lấy cảm hứng từ ký hiệu Ký hiệu đối tượng JavaScript, nhưng có sự khác biệt giữa chúng.
Ví dụ, trong JSON tất cả phím phải được trích dẫn, trong khi ở literals đối tượng này là không cần thiết:
// JSON:
{ "foo": "bar" }
// Object literal:
var o = { foo: "bar" };
Các dấu ngoặc kép là bắt buộc trên JSON vì trong JavaScript (chính xác hơn trong ECMAScript 3rd Edition.), việc sử dụng từ dành riêng như tên thuộc tính là không được phép, ví dụ:
var o = { if: "foo" }; // SyntaxError in ES3
trong khi, sử dụng một chuỗi chữ như một tên thuộc tính (trích dẫn các pro Tên perty) không đưa ra vấn đề:
var o = { "if": "foo" };
Vì vậy, đối "tương thích" (và dễ dàng eval'ing có thể) có dấu ngoặc kép là bắt buộc?.
Các loại dữ liệu trong JSON cũng bị hạn chế để các giá trị sau:
string
number
object
array
- Một literal như:
Ngữ pháp của Strings
thay đổi. Họ phải được phân tách bằng dấu ngoặc kép, trong khi bằng JavaScript, bạn có thể sử dụng dấu ngoặc kép đơn hoặc kép thay thế cho nhau.
// Invalid JSON:
{ "foo": 'bar' }
Các JSON ngữ pháp được chấp nhận của Numbers
cũng thay đổi, trong JavaScript bạn có thể sử dụng Hexadecimal Literals, ví dụ 0xFF
, hoặc (khét tiếng) Octal Literals ví dụ 010
. Trong JSON bạn chỉ có thể sử dụng các chữ số thập phân.
// Invalid JSON:
{ "foo": 0xFF }
Có một số việc triển khai buggy (Firefox 3.5+, IE8 +, json2.js), nơi literals bát phân được phép sai, ví dụ JSON.parse('01')
sẽ tạo ra một SyntaxError
.
Một câu hỏi tại một thời điểm, vui lòng. –
bản sao có thể có của [Sự khác nhau giữa JSON và Ký hiệu chữ của đối tượng là gì?] (Http://stackoverflow.com/questions/2904131/what-is-the-difference-between-json-and-object-literal-notation) – Teepeemm