2012-11-10 25 views
22

Bạn có xem xét các phản ứng web JSON: "xảy ra lỗi serialization"Giá trị chuỗi đơn có được coi là JSON hợp lệ không?

mới có giá trị? Hoặc không phải

Một số người xác thực chấp nhận: http://www.freeformatter.com/json-validator.html

Và một số khác thì không.

Sylvain

+0

Bạn đang nói về phản ứng gì? Bạn có thể chia sẻ điều đó không? – Srinivas

+0

Tôi đã tham khảo giá trị chuỗi đơn: "Đã xảy ra lỗi tuần tự" –

+0

Đảm bảo chuỗi của bạn bị thoát bằng dấu ngoặc kép (""), nghĩa là không chỉ 'Lỗi tuần tự hóa xảy ra ' nhưng ' " "' – tuxSlayer

Trả lời

-3

Tôi không quan tâm nếu một số người xác thực chấp nhận nó. Nó sai. Đó là một câu hỏi thực hành tốt, định dạng Json phải là {"key": "value", .....}. Nếu bạn xem xét rằng văn bản Json, có thể làm việc, nhưng đối với phần còn lại của lập trình viên nó không phải là một Json nghiêm trọng. Nếu bạn chỉ sử dụng văn bản đó, thì bạn không cần Json.

+0

Không đơn giản như vậy. Các đặc tả mới xem xét các giá trị đơn như JSON hợp lệ. –

+0

Hãy xem xét trường hợp của một JSON API, một trường hợp rất phổ biến. Khi trả lại lỗi 404 hoặc lỗi khác, giá trị sẽ được mã hóa như thế nào trong thế giới của bạn? Tôi cũng sẽ đề nghị rằng "nghiêm trọng Json" (chắc chắn bạn có nghĩa là "JSON nghiêm trọng") là những gì các spec JSON định nghĩa. Đối với Internet và ứng dụng kiểu nội dung/json là RFC-7159 (https://tools.ietf.org/html/rfc7159) và nó cho phép một chuỗi thuần túy, cụ thể là: "JSON-text = ws value ws [. ..] Một giá trị JSON PHẢI là một đối tượng, mảng, số, hoặc chuỗi, hoặc một trong ba tên sau đây: false null true ". –

0

Từ RFC4627:

A JSON text is a serialized object or array. 
    JSON-text = object/array 

IE, phần tử gốc phải là một đối tượng hoặc mảng, và không thể là một chuỗi giá trị của chính nó.

+0

[bump] (http://stackoverflow.com/a/24805020/2031077) – igor

10

Theo ngữ pháp tiếp xúc trong http://www.json.org/ (mà tham chiếu Standard ECMA-262 3rd Edition - December 1999 par.5.1.5 Các JSON Grammar) đó là sai:

Yếu tố đầu tiên phải là:

enter image description here

enter image description here

và sau đó một giá trị có thể là một chuỗi:

enter image description here

+1

Xin chào Tony, Tôi cũng đã tham khảo trang đó và tôi cũng hiểu như vậy. Nhưng tôi muốn hỏi cộng đồng kể từ khi một số trang web (giống như một trang web mà tôi putted làm tài liệu tham khảo) xem xét giá trị chuỗi đơn như là một phản ứng json hợp lệ. Nhìn thấy các câu trả lời ở đây chỉ cần xác nhận đó là không có ý nghĩa. –

+0

Tôi đã thử trang web đó và tôi đồng ý với bạn điều đó có vẻ gây hiểu lầm. Thông thường, tôi sử dụng http://jsonlint.com/ không chấp nhận chuỗi dưới dạng JSON hợp lệ: "Lỗi phân tích cú pháp trên dòng 1: " ciao " ^ Mong đợi '{', '['". Thông báo lỗi là rõ ràng: nó đang mong đợi một đối tượng hoặc một mảng. –

24

Đối với số mới JSON RFC, json, chỉ chứa một giá trị duy nhất là hợp lệ.

Văn bản JSON là giá trị được tuần tự hóa. Lưu ý rằng một số đặc tả trước đó của JSON đã hạn chế một văn bản JSON thành một đối tượng hoặc một mảng.

+0

+1 Cảm ơn bạn đã cập nhật – fgb

+0

Có, nó hợp lệ. Lưu ý rằng để có khả năng tương tác tốt hơn, bạn có thể trả lại một mảng phần tử đơn lẻ: '[" value "]' –

16

Có một sự thay đổi của trái tim về vấn đề này giữa RFC4627RFC7159:

RFC4627:

Một JSON văn bản là một đối tượng serialized hoặc mảng.

JSON-text = object/array 

RFC7159:

Một JSON văn bản là một giá trị tuần tự. Lưu ý rằng các thông số kỹ thuật trước đây của
của JSON đã hạn chế văn bản JSON thành một đối tượng hoặc một mảng
.Triển khai chỉ tạo các đối tượng hoặc mảng trong đó văn bản JSON được gọi là
sẽ tương thích với ý nghĩa rằng tất cả các triển khai
sẽ chấp nhận các đối tượng này dưới dạng văn bản JSON phù hợp.

JSON-text = ws value ws 

Không biện minh triết học hay thực tế được cung cấp cho sự thay đổi này của tim. Phiên bản cũ hơn có thể có ý nghĩa hơn vì nó luôn cho rằng cả phần tử danh sách hát và phần tử bản đồ đơn (một cặp hoặc bộ) đều được chứa. Phiên bản thứ hai chỉ cho phép một phần tử danh sách duy nhất không bị chặn.

Các vấn đề liên quan