JSON
オブジェクトは、 JavaScript Object Notation (JSON) をパースするメソッドや、値を JSON に変換するメソッドを持ちます。これは呼び出しや構築をすることができず、また2つのメソッドプロパティを除いて、それ自身に興味深い機能性はありません。
JavaScript と JSON の違い
JSON は、オブジェクト、配列、数値、文字列、真偽値、そして null
をシリアライズする構文です。これは JavaScript の構文に基づいていますが、区別されるものです。ある JavaScript が JSON であるわけではありません。
- Objects と Arrays
- プロパティ名は二重引用符で括った文字列にしなければなりません。また、末尾にカンマを置いてはいけません。
- Numbers
- 先頭にゼロを置くことは禁止されています。また、小数点は1桁以上の数字の後ろに置かなければなりません。
NaN
とInfinity
には対応していません。 - あらゆる 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
オプションでは、他の動作を指定することができます。
例
JSONの例
{
"browsers": {
"firefox": {
"name": "Firefox",
"pref_url": "about:config",
"releases": {
"1": {
"release_date": "2004-11-09",
"status": "retired",
"engine": "Gecko",
"engine_version": "1.7"
}
}
}
}
}
仕様書
ブラウザーの互換性
BCD tables only load in the browser