如何在 JavaScript 中将 JSON 对象字符串化为负零
How do I stringify a JSON object with a negative zero in JavaScript?
如何使用JSON.stringify将负零转换为字符串(-0)?看起来 JSON.stringify 将负零转换为表示正零的字符串。有什么好解决方法的想法吗?
var jsn = {
negative: -0
};
isNegative(jsn.negative) ? document.write("negative") : document.write("positive");
var jsonString = JSON.stringify(jsn),
anotherJSON = JSON.parse(jsonString);
isNegative(anotherJSON.negative) ? document.write("negative") : document.write("positive");
function isNegative(a)
{
if (0 !== a)
{
return !1;
}
var b = Object.freeze(
{
z: -0
});
try
{
Object.defineProperty(b, "z",
{
value: a
});
}
catch (c)
{
return !1;
}
return !0;
}
您可以分别为JSON.stringify
和JSON.parse
编写替换器和齐磊函数。替换器可以利用-0 === 0
、1 / 0 === Infinity
和1 / -0 === -Infinity
来识别负零并将它们转换为特殊的字符串。齐磊应该简单地将特殊字符串转换回-0
。这是jsfiddle。
代码:
function negZeroReplacer(key, value) {
if (value === 0 && 1 / value < 0)
return "NEGATIVE_ZERO";
return value;
}
function negZeroReviver(key, value) {
if (value === "NEGATIVE_ZERO")
return -0;
return value;
}
var a = {
plusZero: 0,
minusZero: -0
},
s = JSON.stringify(a, negZeroReplacer),
b = JSON.parse(s, negZeroReviver);
console.clear();
console.log(a, 1 / a.plusZero, 1 / a.minusZero)
console.log(s);
console.log(b, 1 / b.plusZero, 1 / b.minusZero);
输出:
Object {plusZero: 0, minusZero: 0} Infinity -Infinity
{"plusZero":0,"minusZero":"NEGATIVE_ZERO"}
Object {plusZero: 0, minusZero: 0} Infinity -Infinity
我将负零转换为"NEGATIVE_ZERO"
,但您可以使用任何其他字符串,例如 "(-0)"
.
您可以使用 JSON.stringify 和替换器函数将负零更改为特殊字符串(如前面的答案中所述),然后使用全局字符串替换将这些特殊字符串更改回生成的 JSON 字符串中的负零。前任:
function json(o){
return JSON.stringify(o,(k,v)=>
(v==0&&1/v==-Infinity)?"-0.0":v).replace(/"-0.0"/g,'-0')
}
console.log(json({'hello':0,'world':-0}))
相关文章:
- 字符串对象类型或基元类型也是如此
- Javascript-如何从字符串/对象引用回调
- JavaScript,字符串/对象操作的例外
- 如何在require中传递字符串/对象
- 字符串对象比较总是返回false
- 对字符串对象调用 .localeCompare 与构造特制的 Intl.Collator 对象之间的性能差异
- 将变量打印到控制台时出现意外字符串:[对象窗口]
- 如何使用javascript在字符串对象中添加原型
- 如何在 JavaScript 中设置/更新字符串对象的值
- jQuery:在 $.each 中从字符串类型转换为字符串对象
- 将属性添加到字符串对象时出现问题
- 从字符串对象中删除第一个出现的字母
- 如何正确地将JQuery函数从表单的输入标记中检索到的这些字符串对象转换为数字
- 转换“;字符串对象“;到对象
- Javascript中字符串对象到字符串原语的转换
- JavaScript符号类型:(非字符串对象键)
- 正在重新定义字符串对象中的长度属性
- 带有字符串对象的jQuery选择器不起作用
- 如何在javascript中将JSON字符串对象打印为下拉列表
- 将日期字符串对象转换为其他格式