JSON.stringify可以输出格式化为double的整数吗?

时间:2016-10-26 20:41:16

标签: javascript json

这是我正在做的一个例子:


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解析失败。

2 个答案:

答案 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.01在javascript中是等效的,因为语言中没有int / double / long这样的东西。相反,您需要添加类型数据,以便完全清楚您期望结果的类型。

{"x": {"type": "double", "value": 1}}