@AndreasN is correct: JSON specification quy định việc sử dụng dấu ngoặc kép để thực sự là JSON. Nếu bạn không sử dụng dấu ngoặc kép, nó có thể là một đối tượng hợp lệ theo nghĩa đen trong Javascript, nhưng nó không phải là JSON. Các dịch vụ khác bên cạnh Javascript sử dụng Javascript bên trình duyệt (ví dụ: webservices sử dụng php, Java, v.v.) và nếu bạn xây dựng một chuỗi thiếu dấu ngoặc kép, không có gì đảm bảo rằng nó sẽ được phân tích cú pháp chính xác - mặc dù tôi nghi ngờ đủ mạnh để làm như vậy.
FYI rất nguy hiểm trong Javascript để trực tiếp sử dụng eval() trên chuỗi JSON từ các nguồn mà bạn không thể ngăn chặn các cuộc tấn công nguy hiểm. Một lần nữa, xem JSON site cung cấp thêm giải thích cũng như tệp javascript rất ngắn, phân tích cú pháp chuỗi JSON thành đối tượng Javascript một cách an toàn.
chỉnh sửa: Tôi đoán về mặt kỹ thuật câu hỏi ban đầu của bạn không phải về JSON mà là cú pháp của Javascript cho literals đối tượng. Sự khác biệt là các đối tượng constructable từ một chuỗi JSON sẽ loại trừ nhiều literals khác có thể đối tượng, ví dụ:
var a = {cat: "meow", dog: "woof"};
var aname = {cat: "Garfield", dog: "Odie"};
var b = {
counter: 0,
pow: function(x) { return x+1; },
zap: function(y) { return (counter += y); }
};
var c = {
all: [a,aname],
animals: a,
names: aname,
};
Object literals "a" và "aname" có thể được thể hiện bằng JSON (bằng cách thêm dấu ngoặc kép để tên tài sản) . Nhưng đối tượng literals "b" và "c" không thể. Đối tượng chữ "b" chứa các hàm (không được phép trong JSON). Đối tượng chữ "c" ở trên chứa tham chiếu đến các biến khác theo cách không thể biểu diễn trong JSON vì một số tham chiếu được chia sẻ. Nếu bạn thực hiện thay đổi đối với c.names
, nó cũng sẽ thay đổi c.all[1]
vì chúng chia sẻ tham chiếu đến cùng một biến. JSON chỉ có thể thể hiện các đối tượng có cấu trúc cây (ví dụ: mỗi phần tử con của đối tượng tổng thể là độc lập).
Nguồn
2008-12-19 14:49:16
IE cũng vậy. Ngay cả IE6 cũng chấp nhận nó. – Tomalak
yeah, tôi đã không nhận thấy bất kỳ vấn đề với phương thức unquoted lớp – nickf