JSON Spec - czy klucz musi być otoczony cudzysłowami?

Przykład: Czy poniższy kod jest ważny w stosunku do JSON Spec ?

{
    precision: "zip"
}

Czy powinienem zawsze używać następującej składni? (A jeśli tak, to dlaczego?)

{
    "precision": "zip"
}
Nie znalazłem czegoś na ten temat w specyfikacji JSON. Chociaż używają cudzysłowów wokół swoich kluczy w swoich przykładach. (Więc na razie też to zrobię)
Author: bluish, 2009-06-04

5 answers

Tak, potrzebujesz cudzysłowów. Ma to na celu uproszczenie i uniknięcie konieczności posiadania innej metody escape dla zarezerwowanych słów kluczowych javascript, czyli {for:"foo"}.

 123
Author: cobbal,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2011-06-29 06:32:53

Masz rację, aby używać ciągów jako klucza. Oto fragment RFC 4627-typ aplikacji / nośnika json dla JavaScript Object Notation (JSON)

2.2. Obiekty

Struktura obiektu jest reprezentowana jako para nawiasów klamrowych otaczające zero lub więcej par nazwa / wartość (lub członków). nazwa to string . Po każdej nazwie pojawia się pojedynczy dwukropek, oddzielający nazwę od wartości. Pojedynczy przecinek oddziela wartość od po nazwisko. Nazwy wewnątrz obiektu powinny być unikalne.

object = begin-object [ member *( value-separator member ) ] end-object

member = string name-separator value

[...]

2.5. Strings

Reprezentacja łańcuchów jest podobna do konwencji używanych w C rodzina języków programowania. Ciąg zaczyna się i kończy na cudzysłów. [...]

string = quotation-mark *char quotation-mark

quotation-mark = %x22 ; "

Przeczytaj cały RFC tutaj .

 126
Author: PatrikAkerstrand,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-01-31 03:23:36

Z 2.2. Obiekty

Struktura obiektu jest reprezentowana jako para nawiasów klamrowych otaczających zero lub więcej par nazwa / wartość (lub prętów). Imię to ciąg znaków.

I od 2.5. Strings

Łańcuch zaczyna się i kończy cudzysłowem.

Więc powiedziałbym, że zgodnie ze standardem: tak, zawsze powinieneś zacytować klucz (chociaż niektóre parsery mogą być bardziej wyrozumiałe)

 11
Author: Cebjyre,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-06-04 09:29:12

Tak, cytaty są obowiązkowe. http://json.org / says:

string
    ""
    " chars "
 6
Author: ,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-06-04 09:25:41

Ponieważ można umieścić " rodzic.child " przerywana notacja i nie musisz umieszczać rodzica ["dziecko"], który jest również ważny i przydatny, powiedziałbym, że oba sposoby są technicznie dopuszczalne. Wszystkie parsery powinny działać w obie strony. Jeśli twój parser nie potrzebuje cudzysłowów na kluczach, to prawdopodobnie lepiej ich nie umieszczać (oszczędza miejsce). Ma sens nazywać je ciągami, ponieważ takie są, a ponieważ nawiasy kwadratowe dają możliwość korzystania z wartości dla kluczy zasadniczo czyni to doskonałym nie ma sensu. W Json można umieścić...

>var keyName = "someKey";
>var obj = {[keyName]:"someValue"};

>obj
Object {someKey: "someValue"}

Po prostu dobrze bez problemów, jeśli potrzebujesz wartości dla klucza i żaden cytowany nie będzie działać, więc jeśli nie, nie możesz, więc nie będziesz tak "nie potrzebujesz cudzysłowów na kluczach". Nawet jeśli można powiedzieć, że są technicznie sznurkami. Logika i użycie argumentują inaczej. Nie jest też oficjalnie wyprowadzany obiekt {"someKey": "somewalue"} dla obj w naszym przykładzie uruchamiany z konsoli dowolnej przeglądarki.

 -2
Author: Master James,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-01-31 01:55:48