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. Opcja reviver pozwala zinterpretować, co replacer 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 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 Latest Draft (ECMA-262)
The definition of 'JSON' in that specification.
Draft

Kompatybilność

Update compatibility data on GitHub
DesktopMobileServer
ChromeEdgeFirefoxInternet ExplorerOperaSafariAndroid webviewChrome for AndroidFirefox for AndroidOpera for AndroidSafari on iOSSamsung InternetNode.js
JSONChrome Full support 3Edge Full support 12Firefox Full support 3.5IE Full support 8Opera Full support 10.5Safari Full support 4WebView Android Full support ≤37Chrome Android Full support 18Firefox Android Full support 4Opera Android Full support 11Safari iOS Full support YesSamsung Internet Android Full support 1.0nodejs Full support Yes
JavaScript is a superset of JSONChrome Full support 66Edge No support NoFirefox Full support 62IE No support NoOpera Full support 53Safari Full support YesWebView Android Full support 66Chrome Android Full support 66Firefox Android Full support 62Opera Android Full support 47Safari iOS Full support YesSamsung Internet Android Full support 9.0nodejs Full support 10.0.0
parseChrome Full support 3Edge Full support 12Firefox Full support 3.5IE Full support 8Opera Full support 10.5Safari Full support 4WebView Android Full support ≤37Chrome Android Full support 18Firefox Android Full support 4Opera Android Full support 11Safari iOS Full support YesSamsung Internet Android Full support 1.0nodejs Full support Yes
stringifyChrome Full support 3Edge Full support 12Firefox Full support 3.5IE Full support 8Opera Full support 10.5Safari Full support 4WebView Android Full support ≤37Chrome Android Full support 18Firefox Android Full support 4Opera Android Full support 11Safari iOS Full support YesSamsung Internet Android Full support 1.0nodejs Full support Yes

Legend

Full support  
Full support
No support  
No support

Zobacz także

Tools