这是我正在做的一个例子:
var serialized = JSON.stringify({x: 1.0});
这就是我想要的结果:
{"x": 1.0}
但这是我得到的结果:
{"x": 1}
我尝试使用JSON.stringify
的第二个参数:
JSON.stringify({x: 1.0}, function (k, v) {
if (Number.isInteger(v)) {
return v.toFixed(1);
}
return v;
});
但这并没有让我得到我想要的东西:
{"x": "1.0"}
查看JSON.stringify
x
,我没有看到明显的方法来实现我想做的事情。是否有解决方法或我缺少的东西?
对于上下文,我正在获取序列化数据并将其传递给elasticsearch集群,我希望elasticsearch动态创建1
字段的映射(在示例中)。但是,如果elasticsearch看到的第一个数字是1.0
而不是x
,则会创建一个长映射而不是双映射,以及将来的双1.5
值(例如''
})会导致elasticsearch解析失败。
答案 0 :(得分:3)
考虑使用JSON.stringify和String#的替换函数替换以及用于查找要替换的整数的小数字。
看起来像这样:
var s = JSON.stringify({ x: 1.0 }, function (k, v) {
if (Number.isInteger(v)) {
return v + 1e-10;
}
return v;
}).replace(/\.0000000001/, '.0');
console.log(s);

答案 1 :(得分:0)
1.0
和1
在javascript中是等效的,因为语言中没有int / double / long这样的东西。相反,您需要添加类型数据,以便完全清楚您期望结果的类型。
{"x": {"type": "double", "value": 1}}