JSON.stringify()

値をJSONに変換します。任意で値の置換を行う関数を指定、または

文法

JSON.stringify(value[, replacer [, space]])
引数 説明
value JSON文字列に変換する値を指定します。
replacer 関数が指定された場合、その関数は文字列変換中に遭遇した値とプロパティを変換処理を行います。 配列の場合、その配列の要素にプロパティのキーをホワイトリストとして指定することで、 最終的に出力されるJSON文字列をそのキーにマッチする項目だけに絞り込むことが出来ます。 replacerの詳細な説明については、 JavaScriptガイドのUsing native JSONを参照してください。
space 最終的に出力されるJSON文字列の書式(pretty-print)を整えます。

説明

JSON.stringifyは、値をそれを表すJSON文字列に変換します。

  • 配列では無いオブジェクトのプロパティは、変換後に特定の順番になることが保証されません。 同じオブジェクトを含むプロパティだからといって、変換後に特定の順番に並べられることを期待しないでください。
  • 真偽値、数値、文字列オブジェクトは、慣習的な変換作法に則って、それに対応するプリミティブ値に変換されます。
  • 変換中にundefined、関数、シンボル(Symbol)のいずれかが見つかった場合、 それは省略される(オブジェクト内で見つかった場合)か、またはnull(配列で見つかった場合)とされます。
  • 全てのシンボル(Symbol)-キーのプロパティは、replacerが使用されていたとしても、 完全に無視されます。
JSON.stringify({});                        // '{}'
JSON.stringify(true);                      // 'true'
JSON.stringify("foo");                     // '"foo"'
JSON.stringify([1, "false", false]);       // '[1,"false",false]'
JSON.stringify({ x: 5 });                  // '{"x":5}'

JSON.stringify({x: 5, y: 6});
// '{"x":5,"y":6}' or '{"y":6,"x":5}'
JSON.stringify([new Number(1), new String("false"), new Boolean(false)]);
// '[1,"false",false]'

// Symbols:
JSON.stringify({x: undefined, y: Object, z: Symbol("")});
// '{}'
JSON.stringify({[Symbol("foo")]: "foo"});
// '{}'
JSON.stringify({[Symbol.for("foo")]: "foo"}, [Symbol.for("foo")]);
// '{}'
JSON.stringify({[Symbol.for("foo")]: "foo"}, function (k, v) {
  if (typeof k === "symbol"){
    return "a symbol";
  }
});
// '{}'

space引数

space引数は、最終的な文字列での空白の制御に使用されます。 これに数値が指定された場合、変換の際に、それぞれ指定された文字数分(10まで)の空白文字でインデントされます。 これに文字列が指定された場合、この文字列(先頭10文字まで)によってインデントされます。

JSON.stringify({ a: 2 }, null, " ");   // '{\n "a": 2\n}'

標準的なpretty-print(整えて印字)外観を真似るのに、タブ文字を使用します。

JSON.stringify({ uno: 1, dos : 2 }, null, '\t')
// 下記の文字列を返します
// '{            \
//     "uno": 1, \
//     "dos": 2  \
// }'

toJSONの振る舞いについて

変換されるオブジェクトがtoJSONという名のプロパティを持ち、その値が関数である場合、 そのtoJSON関数は、本来のシリアライズ処理に代わりに、JSONの変換処理をカスタマイズします。 値は変換処理で呼び出される際に、そのtoJSON関数によって返されます。 下記はその例になります。

var obj = {
  foo: 'foo',
  toJSON: function () {
    return 'bar';
  }
};
JSON.stringify(obj);      // '"bar"'
JSON.stringify({x: obj}); // '{"x":"bar"}'

localStorageでのJSON.stringifyの使用例

ユーザーによって作成されたオブジェクトを保管し、 またブラウザが閉じられた後でも、それを復元出来るようにしたいといった要件がある場合、 下記の例はJSON.stringifyを使用するのに相応しいモデルと言えます。

// JSONの見本を作成
var session = {
    'screens' : [],
    'state' : true
};
session.screens.push({"name":"screenA", "width":450, "height":250});
session.screens.push({"name":"screenB", "width":650, "height":350});
session.screens.push({"name":"screenC", "width":750, "height":120});
session.screens.push({"name":"screenD", "width":250, "height":60});
session.screens.push({"name":"screenE", "width":390, "height":120});
session.screens.push({"name":"screenF", "width":1240, "height":650});

// JSON.stringifyによるJSON文字列への変換後、
// sessionと名付けられたlocalStorageへ保存します。
localStorage.setItem('session', JSON.stringify(session));

// JSON.stringifyで生成され、localStorageに保存された文字列を
// 再びJSONオブジェクトに戻しています。
var restoredSession = JSON.parse(localStorage.getItem('session'));

// restoredSession変数には、localStorageに保存された
// オブジェクトが格納されています。
console.log(restoredSession);

仕様

ブラウザ互換性

デスクトップ
機能 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) ◯ ◯ ◯

関連項目

 Back to top

© 2017 Mozilla Contributors
Licensed under the Creative Commons Attribution-ShareAlike License v2.5 or later.

このページは、ページトップのURL先のMozilla Developer Network(以下、MDN)のコンテンツを翻訳した内容を基に構成されています。 構成について異なる点も含まれますので、下記の項目を確認し、必要に応じて元のコンテンツをご確認ください。 もし、誤訳などの間違いを見つけましたら、 @tomofまで教えていただければ幸いです。

  • 特定のブラウザに特化しすぎている情報やあまりにも古い情報、 または試験的に導入されているようなAPIや機能については、省略していることがあります。
  • 例やデモについて、実際にページ内で動作させる関係で一部ソースコードを変更している場合や、 その例で使用しているコンテンツの単語や文章などを日本人向けに変更しいてる場合があります。
  • MDNの更新頻度が高いため、元のコンテンツと比べ情報が古くなっている可能性があります。
  • "訳注:"などの断わりを入れた上で、日本人向けの情報の追記を行っている事があります。