以科学计数法将数字写入JSON,这样它们就不会在其周围引起引号

时间:2018-08-11 01:39:13

标签: javascript json typescript type-conversion stringify

我必须以科学计数法将浮点数存储在JSON中(就像该question中的OP一样)。

我要写入JSON的值是我的JavaScript(Angular / TypeScript)应用程序中的WHERE ROWID <= 10 ,我正在将它们转换为科学形式,例如<number>

问题是toExponential()返回一个字符串值,因此稍后在我的JSON表示法(42).toExponential()中将变成42,而不是"4.2e+1"

如何去除引号?

1 个答案:

答案 0 :(得分:1)

您可以使用JSON.stringify函数的替换器将所有数字转换为指数,然后使用正则表达式稍后删除引号,例如

const struct = { foo : 1000000000000000000000000, bar: 12345, baz : "hello", boop : 0.1, bad: "-.e-0"};

const replacer = (key, val) => {
  if (typeof val === 'number') {
    return val.toExponential();
  }
  return val;
}

let res = JSON.stringify(struct, replacer, 2)

res = res.replace(/"([-0-9.]+e[-+][0-9]+)"/g, (input, output) => {
  try {
    return isNaN(+output) ? input : output;
  } catch (err) {
    return input;
  }
})

给予:

{​​​​​
​​​​​  "foo": 1e+24,​​​​​
​​​​​  "bar": 1.2345e+4,​​​​​
​​​​​  "baz": "hello",​​​​​
​​​​​  "boop": 1e-1,​​​​​
​​​​​  "bad": "-.e-0"​​​​​
​​​​​}​​​​​