mozilla
Your Search Results

    JSON.stringify

    概要

    JSON.stringify() メソッドは JavaScript の値を JSON 文字列に変換します。置き換え関数を指定して値を置き換えたり、置き換え配列を指定して指定されたプロパティのみを含むようにしたりできます。

    構文

    JSON.stringify(value[, replacer [, space]])

    引数

    value
    JSON 文字列に変換する値。
    replacer Optional
    もし関数である場合、文字列化の間に出会った値とプロパティを変換します。もし配列である場合は、最終的な文字列のオブジェクトに含まれるプロパティの集合を指定します。
    replacer 関数の詳細な説明はネイティブ JSON を使うの記事にあります。
    space Optional
    結果の文字列を整形して出力します。

    説明

    JSON.stringify() は値をそれを表す JSON 表記に変換します:

    • 配列でないオブジェクトのプロパティは、特定の順序で文字列化されることを保証されてはいません。文字列化において同じオブジェクトのプロパティの順序付けを信用しないでください。
    • BooleanNumberString オブジェクトは文字列化の際に対応するプリミティブな値に変換され、慣習的な変換セマンティクスと一致します。
    • もし変換の際に undefined、関数、またはシンボルに出会った場合、それは省略される(オブジェクトで見つかった時)か null に変更される(配列で見つかった時)ことになります。
    • プロパティのキーがシンボルであるプロパティはすべて、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}' または '{"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, ' ');
    // '{
    //  "a": 2
    // }'
    

    タブ文字を使って標準的な整形の見た目を真似します:

    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"}'
    

    localStorageJSON.stringify() を使う例

    ユーザ側で作成したオブジェクトを保持して、ブラウザが閉じられた後も復元できるようにしたい場合に、JSON.stringify() が適用できる模範的な例:

    関数は有効な JSON のデータ型ではないため、うまくいきません。また Date のような一部のオブジェクトは JSON.parse() のあと文字列になるでしょう。

    // 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);
    

    replacer 引数を使う例

    var foo = { foundation: 'Mozilla', model: 'box', week: 45, transport: 'car', month: 7 };
    
    JSON.stringify(foo, function(key, value) {
      if (typeof value === 'string') {
        return undefined; // 値が文字列であるプロパティをすべて取り除く。
      }
      return value;
    });  // '{"week":45,"month":7}'
    
    JSON.stringify(foo, ['week', 'month']);  
    // '{"week":45,"month":7}', "week" と "month" プロパティだけが保持される
    

    仕様

    仕様書 策定状況 コメント
    ECMAScript 5.1 (ECMA-262)
    The definition of 'JSON.stringify' in that specification.
    Standard 最初期の定義。JavaScript 1.7 で実装されました。
    ECMAScript 6 (ECMA-262)
    The definition of 'JSON.stringify' in that specification.
    ドラフト  

    ブラウザ実装状況

    機能 Chrome Firefox (Gecko) Internet Explorer Opera Safari
    基本サポート (有) 3.5 (1.9.1) 8.0 10.5 4.0
    機能 Android Chrome for Android Firefox Mobile (Gecko) IE Mobile Opera Mobile Safari Mobile
    基本サポート (有) (有) 1.0 (1.0) (有) (有) (有)

    Kangax's compat table に基づく。

    関連情報

    ドキュメントのタグと貢献者

    Contributors to this page: twe
    最終更新者: twe,