JSON
JSONオブジェクトは、JavaScript Object Notation(JSON)の解析と、JSONへの値の変換を行うメソッドを含みます。 呼び出されること、またはコンストラクタされることは出来ず、 2つのメソッドプロパティがあるだけで、他にこのオブジェクトに何らかの機能があるわけではありません。
説明
JavaScript Object Notation
JSONはオブジェクト、配列、数値、文字列、真偽値、nullをシリアライズするための文法です。 JavaScriptの文法が基になっていますが、JavaScriptの一部はJSONでは無く、JSONの一部はJavaScriptでは無いことは明白です。 JSON: The JavaScript subset that isn'tも、参照してみてください。
JavaScriptとJSONの相違点
JavaScript の型 |
JSONとの違い |
---|---|
オブジェクトと配列 | プロパティ名は、ダブルクォーテーションで囲われた文字列で無ければなりません。 また、末尾のカンマが禁止されています。 |
数値 | 先頭の0は禁止されており、小数点は少なくとも1桁を必要とします。 |
文字列 |
限られた文字の集まりのみエスケープすることが可能で、
特定の制御文字は禁止されています。
Unicodeの改行(
|
完全な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を除きどこにでも置くことが出来ます。
(JSONNumber:数値に空白を含んではいけません JSONString:文字列に対応する文字であると解釈されたり、エラーの原因になるかもしれません。)
タブ文字(U+0009
)、キャリッジリターン(U+000D
)、スペース(U+0020
)の文字だけが、
正式な空白文字となります。
メソッド
-
JSON.parse()
このメソッドは文字列をJSONとして解析し、解析によって任意で値に変換します。
-
JSON.stringify()
値をJSONに変換します。任意で値の置換を行う関数を指定、または
Polyfill
JSONオブジェクトは古いブラウザではサポートされません。 ネイティブでサポートされないInternet Explorer 6や7のような実装に対して、 下記のコードをスクリプトの先頭に配置することで、この問題を回避することが出来ます。
下記のアルゴリズムは、ネイティブの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オブジェクトには、より複雑で有名な下記のPolyfillが存在します。
仕様
ブラウザ互換性
機能 | Chrome | Firefox (Gecko) |
IE | Opera | Safari |
---|---|---|---|---|---|
基本 | ◯ | 3.5 (1.9.1) | 8.0 | 10.5 | 4.0 |
機能 | Android | Chrome for Android |
Firefox Mobile |
IE Mobile |
Opera Mobile |
Safari Mobile |
---|---|---|---|---|---|---|
基本 | ◯ | 1.0 (1.0) | ◯ | ◯ | ◯ | ◯ |
関連項目
© 2017 Mozilla Contributors
Licensed under the Creative Commons Attribution-ShareAlike License v2.5 or later.
このページは、ページトップのURL先のMozilla Developer Network(以下、MDN)のコンテンツを翻訳した内容を基に構成されています。 構成について異なる点も含まれますので、下記の項目を確認し、必要に応じて元のコンテンツをご確認ください。 もし、誤訳などの間違いを見つけましたら、 @tomofまで教えていただければ幸いです。
- 特定のブラウザに特化しすぎている情報やあまりにも古い情報、 または試験的に導入されているようなAPIや機能については、省略していることがあります。
- 例やデモについて、実際にページ内で動作させる関係で一部ソースコードを変更している場合や、 その例で使用しているコンテンツの単語や文章などを日本人向けに変更しいてる場合があります。
- MDNの更新頻度が高いため、元のコンテンツと比べ情報が古くなっている可能性があります。
- "訳注:"などの断わりを入れた上で、日本人向けの情報の追記を行っている事があります。