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 (en-US)) 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() (en-US) 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() (en-US)
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. Opcja reviver pozwala zinterpretować, co replacer użył zamiast innych typów danych.
JSON.stringify() (en-US)
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 przez null i inne niewspierane typy danych są ocenzurowywane. Opcja replacer 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