この文書では、 Gecko 1.9.1 で追加された ECMAScript 5 互換のネイティブ JSON オブジェクトについて説明します。以前のバージョンの Firefox で JSON を扱う際の基本的な情報については、JSON のページをご覧下さい。
ネイティブ JSON オブジェクトは 2 つの重要なメソッドをもっています。JSON.parse()
メソッドは JSON 文字列をパースし、 JavaScript のオブジェクトに変換します。JSON.stringify()
メソッドは、 JavaScript オブジェクトを JSON 文字列に変換します。
TypeError
例外が起こります。JSON 文字列のパース
JSON 文字列を JavaScript オブジェクトに変換するには、以下の例のように JSON 文字列を単純に JSON.parse()
に渡すだけで済みます。
var jsObject = JSON.parse(jsonString);
JavaScript 1.8.5 における注記
JavaScript 1.8.5 (Firefox 4) 以降では JSON.parse()
では末尾のカンマを許可しません。
// JavaScript 1.8.5 ではいずれも構文エラーとなります var jsObject = JSON.parse("[1, 2, 3, 4, ]"); var jsObject = JSON.parse("{ \"foo\" : 1, }");
オブジェクトを JSON に変換
JavaScript オブジェクトを JSON 文字列に変換するには、オブジェクトをJSON.stringify()
メソッドに渡します:
var foo = {}; foo.bar = "new property"; foo.baz = 3; var jsonString = JSON.stringify(foo);
jsString
は'{"bar":"new property","baz":3}'
と変換されます。
Firefox 3.5.4 以降では JSON.stringify()
オプションの引数で挙動をカスタマイズ可能になります。構文は次の通りです:
jsonString = JSON.stringify(value [, replacer [, space]])
value
- JSON 文字列に変換する JavaScript オブジェクト。
replacer
- 文字列化プロセスの振る舞いを変更する関数、または value オブジェクトのプロパティのうち JSON 文字列出力に含めるホワイトリストを指定する
String
もしくはNumber
オブジェクトの配列。この値が null もしくは指定されなかった場合、オブジェクトのすべてのプロパティが JSON 文字列の出力に含まれます。 space
- 出力される JSON 文字列を読みやすくするために挿入する空白文字を指定する
String
もしくはNumber
オブジェクト。Number
が指定された場合、ホワイトスペースの空白文字数として扱われます。但し 10 を超える数値を指定しても 10 を指定したものとして扱われます。1 より小さい値を指定するとホワイトスペースは含められません。String
が指定された場合、空白文字の代わりにその文字列(または 10 文字を越える場合は最初の 10 文字)が使われます。この値がnull
もしくは指定されなかった場合、ホワイトスペースは含まれません。
replacer パラメータ
replacer
パラメータには関数または配列を指定できます。
replacer
が関数である場合、文字列化するプロパティのキーと値二つをパラメータとして受け取ります。キーが見つかったオブジェクトは this
パラメータとして渡されます。最初空文字列をキー、value
パラメータのオブジェクトを値として関数を呼び出します。関数の返り値がオブジェクト(もしくは配列)であれば順次そのプロパティの名前と値を引数として関数を呼び出します。出力される JSON 文字列は関数の返値に応じて次のようになります:
Number
が返されると、プロパティの値としてその数値に対応する文字列が JSON 文字列に出力されます。String
が返されると、プロパティの値としてその文字列が JSON 文字列に出力されます。Boolean
が返されると、プロパティの値として "true" もしくは "false" が JSON 文字列に出力されます。- その他のオブジェクトが返されると、各プロパティについて
replacer
を呼び出し、再帰的に JSON 文字列化されます。但し関数が返された場合には JSON 文字列には何も追加されません。 undefined
が返されると、プロパティは JSON 文字列の出力に含められません。
replacer
は使えません。オブジェクトのプロパティについては undefined
または関数を返すとそのプロパティがスキップされますが、関数の要素の場合は null
が出力されます。例
function replacer(key, value) { if (typeof value === "string") { return undefined; } return value; } var foo = {foundation: "Mozilla", model: "box", week: 45, transport: "car", month: 7}; var jsonString = JSON.stringify(foo, replacer);
結果として得られる JSON 文字列は {"week":45,"month":7}
となります。
replacer
が配列である場合、オブジェクトのプロパティのうち JSON 文字列出力に含まれるべきプロパティ名のリストとして扱われます。