JSON
Obiekt JSON
zawiera metody do analizy składniowej JavaScript Object Notation (JSON) i konwertowania wartości do formatu JSON. Nie może być on wywołany lub utworzony i oprócz jego dwóch metod, sam w sobie nie ma interesującej funkcjonalności .
Różnice między językiem JavaScript i formatem JSON
Format JSON jest składnią do serializowania obiektów, tablic, liczb, napisów, wartości logicznych oraz null
. Bazuje na składni języka JavaScript, ale różni się od niego: nie każdy JavaScript to JSON.
Obiekty i tablice: Nazwy właściwości muszą znajdować się w podwójnym cudzysłowie; przecinki na końcach (trailing commas) nie są dozwolone.
Liczby: Zera nieznaczące są zakazane. Po przecinku musi się znaleźć co najmniej jedna liczba. Wartości NaN i Infinity nie są wspierane.
Każdy tekst w formacie JSON jest poprawnym wyrażeniem w języku JavaScript – ale wyłącznie w silnikach JavaScript, które mają zaimplementową możliwości, by wszystkie dokumenty w formacie JSON były zgodne ze standardem ECMA-262. W przeciwnym razie, znaki U+2028 (separator linii) i U+2029 (separator akapitów) są dozwolone w literałach znakowych i kluczach w formacie JSON, ale ich użycie w tym konteksie w języku JavaScript skutkuje zgłoszeniem błędu SyntaxError
.
Rozważmy przykład, gdzie funkcja JSON.parse()
przetwarza poniższy literał znakowy jako obiekt JSON, a funkcja eval
wykonuje go jako tekst w języku JavaScript:
var code = '"\u2028\u2029"';
JSON.parse(code); // działa poprawnie
eval(code); // zgłasza błąd SyntaxError
Inne różnice to zgoda wyłącznie na literały znakowe w podwójnym cudzysłowie, brak zabezpieczenia dla undefined
lub komentarzy.
Pełna składnia JSON
Pełna składnia JSON jest następująca:
JSON = null or true or false or JSONNumber or JSONString or JSONObject or JSONArray JSONNumber = - PositiveNumber or PositiveNumber PositiveNumber = DecimalNumber or DecimalNumber . Digits or DecimalNumber . Digits ExponentPart or DecimalNumber ExponentPart DecimalNumber = 0 or OneToNine Digits ExponentPart = e Exponent or E Exponent Exponent = Digits or + Digits or - Digits Digits = Digit or Digits Digit Digit = 0 through 9 OneToNine = 1 through 9 JSONString = "" or " StringCharacters " StringCharacters = StringCharacter or StringCharacters StringCharacter StringCharacter = any character except " or \ or U+0000 through U+001F or EscapeSequence EscapeSequence = \" or \/ or \\ or \b or \f or \n or \r or \t or \u HexDigit HexDigit HexDigit HexDigit HexDigit = 0 through 9 or A through F or a through f JSONObject = { } or { Members } Members = JSONString : JSON or Members , JSONString : JSON JSONArray = [ ] or [ ArrayElements ] ArrayElements = JSON or ArrayElements , JSON
Nieznaczące białe znaki nie mogą występować tylko wewnątrz JSONNumber
(liczby nie mogą zawierać białych znaków) oraz JSONString
(gdzie jest to interpretowane jako odpowiedni znak w litarale znakowym lub może spowodować błąd). Tabulacja pozioma (U+0009), powrót karetki (U+000D), nowa linia (U+000A) oraz spacja (U+0020) to jedyne prawidłowe białe znaki.
Metody
JSON.parse()
- Parsuje literał znakowy na JSON, opcjonalnie przekształca otrzymaną wartosć i ją zwraca. Każde naruszenie składni JSON, wliczając w różnice między językiem JavaScript i JSON, powodują zgłosznie błędu
SyntaxError
. Opcjareviver
pozwala zinterpretować, coreplacer
użył zamiast innych typów danych. JSON.stringify()
- Zwraca literał znakowy JSON odpowiadający określonej wartosci, ewentualnie zawierający jedynie niektóre wartości lub ze zamienionymi wartościami w sposób zdefinowany przez użytkownika. Domyślnie, wszystkie instance
undefined
są zastępowane przeznull
i inne niewspierane typy danych są ocenzurowywane. Opcjareplacer
pozwala określić inne zachowanie.
Specyfikacja
Specification | Status | Comment |
---|---|---|
ECMAScript 5.1 (ECMA-262) The definition of 'JSON' in that specification. |
Standard | Initial definition. |
ECMAScript 2015 (6th Edition, ECMA-262) The definition of 'JSON' in that specification. |
Standard | |
ECMAScript (ECMA-262) The definition of 'JSON' in that specification. |
Living Standard |
Kompatybilność
BCD tables only load in the browser
Zobacz także
Tools
- JSON Diff checker.
- JSON Beautifier/editor.
- JSON Parser
- JSON Validator.