This translation is incomplete. Please help translate this article from English.
概要
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 に基づきます。