Czy klucze JSON muszą być otoczone 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. 6 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"}
.
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 .
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)
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 "
Tak. Ale jeśli potrzebujesz inaczej, checkout JSON5 .
JSON5 to superset JSON, który pozwala na składnię ES5, w tym:
- unquoted Klucze własności
- ciągi jednocyfrowe, unikalne i wieloliniowe
- alternatywne formaty liczb
- komentarze
- extra whitespace
Implementacja referencyjna JSON5 (json5
pakiet npm) dostarcza JSON5
obiekt, który posiada parse
i stringify
metody z tymi samymi parametrami args i semantyką co wbudowany obiekt JSON
.
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
2020-05-04 19:39:49
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.
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