以科学记数法将数字写入 JSON,这样它们就不会被引号括起来
Writing numbers to JSON in scientific notation so that they don't get quotation marks around them
我必须以科学计数法将浮点数存储在 JSON 中(就像 OP 在 question 中所做的那样)。
我必须写入 JSON 的值是 JavaScript (Angular/TypeScript) 应用程序中的 <number>
s,我正在将它们转换为科学形式,例如(42).toExponential()
.
问题是 toExponential() returns 是一个字符串值,所以稍后在我的 JSON 符号中 42
将变为 "4.2e+1"
而不是 4.2e+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"
}
我必须以科学计数法将浮点数存储在 JSON 中(就像 OP 在 question 中所做的那样)。
我必须写入 JSON 的值是 JavaScript (Angular/TypeScript) 应用程序中的 <number>
s,我正在将它们转换为科学形式,例如(42).toExponential()
.
问题是 toExponential() returns 是一个字符串值,所以稍后在我的 JSON 符号中 42
将变为 "4.2e+1"
而不是 4.2e+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"
}