elh*_*efe 5 javascript json nan infinity
我正在研究将 NaN/Infinity 支持添加到使用 JSONRPC 进行客户端/服务器交互的现有科学应用程序的可行性。许多 JSON 库确实处理(在某些情况下可选)NaN 和 Infs,例如:
我知道JSON 规范不支持 NaN 和 Infinity ,并且知道相关 问题。但是,AFAICT 是否有某种方法可以强制本机 JSJSON.stringify()方法发出 NaN/Infinity,或者是否有一个 JS JSON 库可以执行相同操作的问题尚未得到解答。与参考问题的细微差别,也许,但很重要。到目前为止,我一直无法发现这样的方法或库,所以我在这里。编写自己的 JSON 序列化程序是唯一的选择吗?
请注意,replacement参数 ofJSON.stringify()没有帮助,至少在我手中。
更新:将NaN/Infinity 等作为字符串发出会使这些字符串的语义不明确。它们需要像在 Python 和 GSON 实现中一样作为裸字发出。
这是一个例子
JavaScript
var array1 = [-Infinity, -1, 0, 1, 2, NaN, 4, 5, Infinity],
json = JSON.stringify(array1, function (key, value) {
if (value !== value) {
return 'NaN';
}
if (value === Infinity) {
return 'Infinity';
}
if (value === -Infinity) {
return '-Infinity';
}
return value;
}),
array2 = JSON.parse(json, function (key, value) {
if (value === 'NaN') {
return NaN;
}
if (value === 'Infinity') {
return Infinity;
}
if (value === '-Infinity') {
return -Infinity;
}
return value;
});
console.log(json);
console.log(array2);
Run Code Online (Sandbox Code Playgroud)
输出
["-Infinity",-1,0,1,2,"NaN",4,5,"Infinity"]
[-Infinity, -1, 0, 1, 2, NaN, 4, 5, Infinity]
Run Code Online (Sandbox Code Playgroud)
参考
关于jsFiddle
更新:
JavaScript
var array1 = [-Infinity, -1, 0, 1, 2, NaN, 4, 5, Infinity],
json = JSON.stringify(array1, function (key, value) {
if (value !== value) {
return '0/0';
}
if (value === 1/0) {
return '1/0';
}
if (value === -1/0) {
return '-1/0';
}
return value;
}),
array2 = JSON.parse(json, function (key, value) {
if (value === '0/0') {
return 0/0;
}
if (value === '1/0') {
return Infinity;
}
if (value === '-1/0') {
return -1/0;
}
return value;
});
console.log(json);
console.log(array2);
Run Code Online (Sandbox Code Playgroud)
输出
["-1/0",-1,0,1,2,"0/0",4,5,"1/0"]
[-Infinity, -1, 0, 1, 2, NaN, 4, 5, Infinity]
Run Code Online (Sandbox Code Playgroud)
关于jsFiddle
| 归档时间: |
|
| 查看次数: |
3656 次 |
| 最近记录: |