Đăng và trả lời vì có rất nhiều ý tưởng lỗi thời và nhầm lẫn về các tiêu chuẩn. Tính đến tháng 12 năm 2017, có hai tiêu chuẩn cạnh tranh:
RFC 8259 - https://tools.ietf.org/html/rfc8259
ECMA-404 - http: //www.ecma-i Intl.org/publications/files/ECMA-ST/ECMA-404.pdf
json.org gợi ý ECMA-404 là các tiêu chuẩn, nhưng trang web này không xuất hiện để có một cơ quan. Mặc dù tôi nghĩ thật công bằng khi coi ECMA là cơ quan có thẩm quyền, nhưng điều quan trọng ở đây là, điểm khác biệt duy nhất giữa các tiêu chuẩn (liên quan đến các khóa duy nhất) là RFC 8259 nói rằng các khóa phải là duy nhất và ECMA-404 nói rằng chúng không bắt buộc phải có độc nhất.
RFC-8259:
"Tên trong một đối tượng NÊN là duy nhất."
Từ "nên" trong tất cả các chữ hoa như thế, có nghĩa trong thế giới RFC, được định nghĩa cụ thể trong một tiêu chuẩn khác (BCP 14, RFC 2119 - https://tools.ietf.org/html/rfc2119 ) như,
- NÊN Từ này, hoặc tính từ "KHUYẾN NGHỊ", có nghĩa là có thể tồn tại những lý do hợp lệ trong các trường hợp cụ thể để bỏ qua một mục cụ thể, nhưng ý nghĩa đầy đủ phải được hiểu và cân nhắc cẩn thận trước khi chọn một khóa học khác.
ECMA-404:
"Cú pháp JSON không áp đặt bất kỳ hạn chế nào đối với các chuỗi được sử dụng làm tên, không yêu cầu các chuỗi tên đó là duy nhất và không gán bất kỳ ý nghĩa nào cho việc sắp xếp các cặp tên / giá trị."
Vì vậy, cho dù bạn cắt nó như thế nào, thì nó vẫn hợp lệ về mặt cú pháp .
Lý do được đưa ra cho khuyến nghị khóa duy nhất trong RFC 8259 là,
Một đối tượng có tên là duy nhất có thể tương tác theo nghĩa là tất cả các cài đặt phần mềm nhận được đối tượng đó sẽ đồng ý về ánh xạ giá trị tên. Khi tên trong một đối tượng không phải là duy nhất, hành vi của phần mềm nhận được một đối tượng như vậy là không thể đoán trước. Nhiều triển khai chỉ báo cáo cặp tên / giá trị cuối cùng. Các triển khai khác báo cáo lỗi hoặc không phân tích đối tượng và một số triển khai báo cáo tất cả các cặp tên / giá trị, bao gồm các trùng lặp.
Nói cách khác, từ quan điểm RFC 8259, nó hợp lệ nhưng trình phân tích cú pháp của bạn có thể không hoạt động và không có lời hứa nào, nếu có, giá trị sẽ được ghép với khóa đó. Từ quan điểm ECMA-404 (mà cá nhân tôi coi là cơ quan có thẩm quyền), đó là thời hạn hợp lệ. Đối với tôi điều này có nghĩa là bất kỳ trình phân tích cú pháp nào từ chối phân tích cú pháp đều bị hỏng. Nó ít nhất nên phân tích theo cả hai tiêu chuẩn này. Nhưng làm thế nào nó được biến thành đối tượng lựa chọn gốc của bạn, trong mọi trường hợp, các khóa duy nhất hay không, hoàn toàn phụ thuộc vào môi trường và tình huống, và không có điều nào trong tiêu chuẩn bắt đầu.
Dictionary<string, string>