Publikowanie i odpowiadanie, ponieważ istnieje wiele nieaktualnych pomysłów i niejasności dotyczące standardów. Od grudnia 2017 r. Istnieją dwa konkurujące ze sobą standardy:
RFC 8259 - https://tools.ietf.org/html/rfc8259
ECMA-404 - http://www.ecma-international.org/publications/files/ECMA-ST/ECMA-404.pdf
json.org sugeruje ECMA-404 jest standard, ale ta strona nie wydaje się być autorytetem. Chociaż uważam, że sprawiedliwe jest uznawanie ECMA za autorytet, ważne jest tutaj, jedyna różnica między standardami (dotycząca unikatowych kluczy) polega na tym, że RFC 8259 mówi, że klucze powinny być unikalne, a ECMA-404 mówi, że nie muszą być wyjątkowy.
RFC-8259:
„Nazwy w obiekcie POWINNY być unikalne”.
Słowo „powinien” we wszystkich takich wersjach ma znaczenie w świecie RFC, które jest szczegółowo zdefiniowane w innym standardzie (BCP 14, RFC 2119 - https://tools.ietf.org/html/rfc2119 ), ponieważ:
- POWINIEN To słowo lub przymiotnik „ZALECANE” oznaczają, że w pewnych okolicznościach mogą istnieć uzasadnione powody, aby zignorować dany element, ale należy w pełni zrozumieć i dokładnie rozważyć wszystkie implikacje przed wyborem innego kursu.
ECMA-404:
„Składnia JSON nie nakłada żadnych ograniczeń na ciągi używane jako nazwy, nie wymaga, aby ciągi nazw były unikalne i nie przypisywał żadnego znaczenia porządkowi par nazwa / wartość”.
Tak więc, bez względu na to, jak go pokroisz , jest on poprawny pod względem składniowym JSON .
Powodem podania unikalnej kluczowej rekomendacji w RFC 8259 jest:
Obiekt, którego nazwy są unikalne, jest interoperacyjny w tym sensie, że wszystkie implementacje oprogramowania odbierające ten obiekt zgadzają się na odwzorowania nazwa-wartość. Gdy nazwy w obiekcie nie są unikalne, zachowanie oprogramowania, które odbiera taki obiekt, jest nieprzewidywalne. Wiele implementacji zgłasza tylko parę nazwisko / wartość. Inne implementacje zgłaszają błąd lub nie analizują obiektu, a niektóre implementacje zgłaszają wszystkie pary nazwa / wartość, w tym duplikaty.
Innymi słowy, z punktu widzenia RFC 8259 jest on poprawny, ale twój parser może się nie poddawać i nie ma obietnicy, która wartość, jeśli w ogóle, zostanie sparowana z tym kluczem. Z punktu widzenia ECMA-404 (który osobiście uważam za autorytet) jest to ważna kropka. Dla mnie oznacza to, że każdy analizator składni, który odmawia jego analizy, jest uszkodzony. Powinien przynajmniej parsować zgodnie z obydwoma standardami. Jednak sposób, w jaki zmienia się w wybrany obiekt natywny, jest, w każdym razie, unikalnymi kluczami, całkowicie zależnymi od środowiska i sytuacji, i na początku żaden z nich nie jest w standardzie.
Dictionary<string, string>