JSON

JSON オブジェクトは、 JavaScript Object Notation (JSON) をパースするメソッドや、値を JSON に変換するメソッドを持ちます。これは呼び出しや構築をすることができず、また2つのメソッドプロパティを除いて、それ自身に興味深い機能性はありません。

JavaScript と JSON の違い

JSON は、オブジェクト、配列、数値、文字列、真偽値、そして null をシリアライズする構文です。これは JavaScript の構文に基づいていますが、区別されるものです。ある JavaScript が JSON であるわけではありません

Objects と Arrays
プロパティ名は二重引用符で括った文字列にしなければなりません。また、末尾にカンマを置いてはいけません。
Numbers
先頭にゼロを置くことは禁止されています。また、小数点は1桁以上の数字の後ろに置かなければなりません。 NaNInfinity には対応していません。
あらゆる JSON のテキストは有効な JavaScript の式です...
...ただし、 proposal to make all JSON text valid ECMA-262 を実装した JavaScript エンジンのみでの話です。この提案を実装していないエンジンでは、 U+2028 LINE SEPARATOR と U+2029 PARAGRAPH SEPARATOR は JSON の文字列リテラルとプロパティのキーでは許されますが、これらの機能を JavaScript 文字列リテラルの中で使用すると SyntaxError になります。

JSON.parse() が文字列を JSON として解釈し、 eval が文字列を JavaScript として実行するこの例を考えてみてください。

let code = '"\u2028\u2029"'
JSON.parse(code)  // どのエンジンでも "\u2028\u2029" と評価される
eval(code)        // 古いエンジンでは SyntaxError が発生する

他の違いとしては、二重引用符で囲まれた文字列のみを許可していることや、 undefined やコメントの規定がないことなどが挙げられます。 JSON に基づいたより人間に優しい設定フォーマットを使いたい場合、 Babel コンパイラーによって使われる JSON5 と、より一般的に使われる YAML があります。

JSON の完全な構文

JSON の完全な構文は以下のとおりです。

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

重要でないホワイトスペースは、基本的に任意の場所に置くことができますが、 JSONNumber (数値に空白を含んではいけません) や JSONString (一致する文字であると解釈されるか、エラーが発生します) の内部を除きます。ホワイトスペースとして有効な文字はタブ文字 (U+0009)、キャリッジリターン (U+000D)、ラインフィード (U+000A)、空白 (U+0020) のみです。

静的メソッド

JSON.parse(text[, reviver])
文字列 text を JSON として解析し、オプションで生成された値とそのプロパティを変換し、値を返します。 JavaScript と JSON の違いに関連するものを含め、 JSON の構文に違反すると SyntaxError が発生します。 reviver オプションを使用すると、他のデータ型を表すために使われた replacer を解釈することができます。
JSON.stringify(value[, replacer[, space]])
指定した値に対応する JSON 文字列を返します。オプションで、特定のプロパティのみを含むか、ユーザー定義の方法でプロパティ値を置き換えることもできます。既定では、すべての undefined のインスタンスは null に置き換えられ、その他の対応していないネイティブデータ型は打ち切られます。 replacer オプションでは、他の動作を指定することができます。

仕様書

仕様書
ECMAScript (ECMA-262)
JSON の定義

ブラウザーの互換性

Update compatibility data on GitHub
デスクトップモバイルサーバー
ChromeEdgeFirefoxInternet ExplorerOperaSafariAndroid webviewAndroid 版 ChromeAndroid 版 FirefoxAndroid 版 OperaiOSのSafariSamsung InternetNode.js
JSONChrome 完全対応 3Edge 完全対応 12Firefox 完全対応 3.5IE 完全対応 8Opera 完全対応 10.5Safari 完全対応 4WebView Android 完全対応 ≤37Chrome Android 完全対応 18Firefox Android 完全対応 4Opera Android 完全対応 11Safari iOS 完全対応 4Samsung Internet Android 完全対応 1.0nodejs 完全対応 0.1.100
JavaScript is a superset of JSONChrome 完全対応 66Edge 完全対応 79Firefox 完全対応 62IE 未対応 なしOpera 完全対応 53Safari 完全対応 12WebView Android 完全対応 66Chrome Android 完全対応 66Firefox Android 完全対応 62Opera Android 完全対応 47Safari iOS 完全対応 12Samsung Internet Android 完全対応 9.0nodejs 完全対応 10.0.0
parseChrome 完全対応 3Edge 完全対応 12Firefox 完全対応 3.5IE 完全対応 8Opera 完全対応 10.5Safari 完全対応 4WebView Android 完全対応 ≤37Chrome Android 完全対応 18Firefox Android 完全対応 4Opera Android 完全対応 11Safari iOS 完全対応 4Samsung Internet Android 完全対応 1.0nodejs 完全対応 0.1.100
stringifyChrome 完全対応 3Edge 完全対応 12Firefox 完全対応 3.5IE 完全対応 8Opera 完全対応 10.5Safari 完全対応 4WebView Android 完全対応 ≤37Chrome Android 完全対応 18Firefox Android 完全対応 4Opera Android 完全対応 11Safari iOS 完全対応 4Samsung Internet Android 完全対応 1.0nodejs 完全対応 0.1.100

凡例

完全対応  
完全対応
未対応  
未対応

関連情報

ツール