概要
JSON オブジェクトは、値を JavaScript Object Notation (JSON) へ、および JSON を値に変換するメソッドを持ちます。
JavaScript Object Notation
JSON は、オブジェクト、配列、数値、文字列、真偽値、そして null をシリアライズする構文です。これは JavaScript の構文に基づいていますが、JavaScript とは異なります: JavaScript の一部は JSON ではなく、JSON の一部も JavaScript ではありません。
標準オブジェクト、配列の文字表記、JSON の間の主な違いは、JSON オブジェクトのプロパティ名がすべてダブルクォーテーションで括られた文字列でなければならないことと、オブジェクトや配列で末尾のカンマが禁じられていることです。標準的な数値表記と JSON の数値表記の主な違いは、JSON では先行するゼロの付加が禁じられていることと、数値の小数点の後には少なくとも 1 つの数字が続かなければならないことです。標準的な文字列表記と JSON の文字列表記の主な違いは、JSON では文字列内で限られた文字一式だけがエスケープされること、文字列内で特定の制御文字が禁じられること、Unicode の LINE SEPARATOR (U+2028) および PARAGRAPH SEPARATOR (U+2029) が許可されること、そして文字列はダブルクォーテーションで括らなければならないことです。
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 オブジェクトは、JSON の構文解析と値を JSON に変換するメソッドを持ちます。
それは呼び出されたり構築されたりできず、また 2 つのメソッドを除きそれ自身に興味深い機能性はありません。
プロパティ
メソッド
- parse
- 文字列を JSON として解析し、また任意で作り出された値やそのプロパティを変換し、値を返します。
- stringify
- 指定した値に対応する JSON 文字列を返し、また任意で特定のプロパティのみを含むようにしたり、ユーザ定義の規則によりプロパティの値を置き換えたりします。
ブラウザの互換性
JSON オブジェクトは古いブラウザでサポートされていません。この問題はスクリプトの先頭に以下のコードを挿入して、(Internet Explorer 6 のような) JSON をネイティブにサポートしないブラウザでの JSON オブジェクトの利用を可能にすることで回避できます。
以下のアルゴリズムは、ネイティブな JSON オブジェクトを模倣するものです:
if (!window.JSON) {
window.JSON = {
parse: function (sJSON) { return eval("(" + sJSON + ")"); },
stringify: function (vContent) {
if (vContent instanceof Object) {
var sOutput = "";
if (vContent.constructor === Array) {
for (var nId = 0; nId < vContent.length; sOutput += this.stringify(vContent[nId]) + ",", nId++);
return "[" + sOutput.substr(0, sOutput.length - 1) + "]";
}
if (vContent.toString !== Object.prototype.toString) { return "\"" + vContent.toString().replace(/"/g, "\\$&") + "\""; }
for (var sProp in vContent) { sOutput += "\"" + sProp.replace(/"/g, "\\$&") + "\":" + this.stringify(vContent[sProp]) + ","; }
return "{" + sOutput.substr(0, sOutput.length - 1) + "}";
}
return typeof vContent === "string" ? "\"" + vContent.replace(/"/g, "\\$&") + "\"" : String(vContent);
}
};
}
より複雑な、JSON の有名なポリフィルは、JSON2 および JSON3 向けのものがあります。
| 機能 | Firefox (Gecko) | Chrome | Internet Explorer | Opera | Safari |
|---|---|---|---|---|---|
| 基本サポート | 3.5 | (有) | 8.0 | 10.5 | 4.0 |
| 機能 | Firefox Mobile (Gecko) | Android | IE Mobile | Opera Mobile | Safari Mobile |
|---|---|---|---|---|---|
| 基本サポート | (有) | ? | ? | ? | ? |
Kangax's compat table に基づきます。
Mozilla Developer Network