Theo sơ đồ máy trạng thái trên trang web JSON , chỉ cho phép thoát các ký tự trích dẫn kép, không được trích dẫn đơn. Các ký tự trích dẫn đơn không cần phải thoát:
Cập nhật - Thêm thông tin cho những người quan tâm:
Douglas Crockford không nói cụ thể tại sao đặc tả JSON không cho phép thoát các dấu ngoặc đơn trong chuỗi. Tuy nhiên, trong cuộc thảo luận về JSON trong Phụ lục E của JavaScript: Các bộ phận tốt , ông viết:
Các mục tiêu thiết kế của JSON là tối thiểu, di động, văn bản và một tập hợp con của JavaScript. Chúng ta càng ít đồng ý để tương tác, chúng ta càng dễ dàng tương tác.
Vì vậy, có lẽ ông quyết định chỉ cho phép các chuỗi được xác định bằng cách sử dụng dấu ngoặc kép vì đây là một quy tắc ít hơn mà tất cả các triển khai JSON phải đồng ý. Kết quả là, một ký tự trích dẫn trong một chuỗi vô tình chấm dứt chuỗi, bởi vì theo định nghĩa, một chuỗi chỉ có thể được chấm dứt bởi một ký tự trích dẫn kép. Do đó, không cần phải cho phép thoát một ký tự trích dẫn trong đặc tả chính thức.
Đào một chút sâu hơn, Crockford
org.json thực hiện JSON cho Java là cho phép hơn và
không cho phép ký tự dấu nháy đơn:
Các văn bản được tạo bởi các phương thức toString tuân thủ nghiêm ngặt các quy tắc cú pháp JSON. Các nhà xây dựng dễ tha thứ hơn trong các văn bản mà họ sẽ chấp nhận:
...
- Chuỗi có thể được trích dẫn với '(trích dẫn đơn).
Điều này được xác nhận bởi mã nguồn JSONTokener . Các nextString
phương pháp chấp nhận thoát ký tự dấu nháy đơn và xử lý chúng giống như ký tự ngoặc kép:
public String nextString(char quote) throws JSONException {
char c;
StringBuffer sb = new StringBuffer();
for (;;) {
c = next();
switch (c) {
...
case '\\':
c = this.next();
switch (c) {
...
case '"':
case '\'':
case '\\':
case '/':
sb.append(c);
break;
...
Ở đầu phương thức là một nhận xét thông tin:
Định dạng JSON chính thức không cho phép các chuỗi trong dấu ngoặc đơn, nhưng việc triển khai được phép chấp nhận chúng.
Vì vậy, một số triển khai sẽ chấp nhận dấu ngoặc đơn - nhưng bạn không nên dựa vào điều này. Nhiều triển khai phổ biến khá hạn chế về vấn đề này và sẽ từ chối JSON có chứa các chuỗi trích dẫn đơn và / hoặc thoát các trích dẫn đơn.
Cuối cùng, để buộc câu hỏi này trở lại câu hỏi ban đầu, jQuery.parseJSON
trước tiên hãy thử sử dụng trình phân tích cú pháp JSON gốc của trình duyệt hoặc thư viện được tải như json2.js khi áp dụng (mà trên ghi chú bên cạnh là thư viện dựa trên logic của jQuery nếu JSON
không được xác định) . Do đó, jQuery chỉ có thể được cho phép như triển khai cơ bản:
parseJSON: function( data ) {
...
// Attempt to parse using the native JSON parser first
if ( window.JSON && window.JSON.parse ) {
return window.JSON.parse( data );
}
...
jQuery.error( "Invalid JSON: " + data );
},
Theo như tôi biết thì các triển khai này chỉ tuân thủ đặc tả JSON chính thức và không chấp nhận các trích dẫn đơn, do đó jQuery cũng không.