2013-05-20 11 views
11

をnullにインフィニティの変換は言う:ヌル:私はJSON.stringify私はJavaScriptのオブジェクトを持っている

var b = JSON.stringify(a); 

を行うと

var a = {b: Infinity, c: 10}; 

は、それは次のよう

B = "{" b "を返します。 、 "c":10} ";

JSON.stringifyはどのようにオブジェクトを文字列に変換しますか?

私はMDN Solutionを試しました。

function censor(key, value) { 
    if (value == Infinity) { 
    return "Infinity"; 
    } 
    return value; 
} 
var b = JSON.stringify(a, censor); 

しかし、この場合、文字列 "Infinity"を返さなければなりません。Infinityです。私がInfinityを返すと、Infinityは再びnullに変換されます。

どのようにこの問題を解決しますか。 JSONは無限大またはNaNを持っていない

答えて

9

は、InfintityはJSON値として格納することができる値の一部ではありません。

あなたはJSONの構文解析に検閲法を逆にすることができます:

var c = JSON.parse(
      b, 
      function (key, value) { 
      return value === "Infinity" ? Infinity : value; 
      } 
     ); 
+0

これは私が常に行うことができますが、私はこれを実行する必要はありませんように、無限ではない「インフィニティ」を取得するにはいいだろう何百ものプロパティを持つ私の何百ものオブジェクトの追加チェック。 –

+0

私が答えて書いたように、値として「Infinity」(引用符なし)を含むJSONファイルは有効なJSONではありません。非標準に準拠したJSONファイルを作成する必要はありません。 – JohnB

+0

@DigvijayYadav、私はあなたが獣の性質と一緒に生きなければならないことを恐れる。 – KooiInc

5

、この質問を参照してください。

JSON left out Infinity and NaN; JSON status in ECMAScript?

したがって{ b: Infinity, c: 10 }は有効なJSONではありません。あなたはJSONで無限大をエンコードする必要がある場合、あなたはおそらく、オブジェクトに頼る必要があります:

{ 
    "b": { "is_infinity": true, "value": null }, 
    "c": { "is_infinity": false, "value": 10 } 
} 

この構造によって生成され、あなたの上記の例で与えられたあなたはそれがないと言うん何、

function censor(key, value) { 
    if (value == Infinity) { 
    return JSON.stringify ({ is_infinity: true, value: null }); 
    } else { 
    return JSON.stringify ({ is_infinity: false, value: value }); 
    } 
} 
var b = JSON.stringify(a, censor); 
関連する問題