23

JavaScriptオブジェクトに次のように言ってもらいます:

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

私がする時

var b = JSON.stringify(a);

次を返します

b = "{"b":null, "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 に変換されます。

この問題を解決するにはどうすればよいですか。

4

3 に答える 3

14

他の回答と同様に、InfintityJSON が値として保存できる値の一部ではありません。

JSON の解析時に検閲方法を逆にすることができます。

var c = JSON.parse(
          b,
          function (key, value) {
            return value === "Infinity"  ? Infinity : value;
          }
        );
于 2013-05-20T07:38:37.670 に答える
7

JSON には Infinity または NaN がありません。次の質問を参照してください。

JSON は Infinity と NaN を除外しました。ECMAScript の JSON ステータス?

したがって{ 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);
于 2013-05-20T07:33:02.350 に答える
4

JSON は infinity/Nan をサポートしていません。

以下のリンクを参照してください。

http://www.markhansen.co.nz/inspecting-with-json-stringify/

https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/JSON/stringify

JSON は Infinity と NaN を除外しました。ECMAScript の JSON ステータス?

ありがとう、

シヴァ

于 2013-05-20T07:34:37.327 に答える