Nodejs json.parse 保留科学记数法



谁能帮我找出我面临的 JSON.parse() 问题? 这是利用 Node.js v6.9。

基本上,我需要在我的数据库中存储一些数据,就像我在文件中看到的那样。 虽然我有绝大多数工作,但有几个问题我正在努力解决。

第一个问题是当我在数组中遇到科学记数法时。 当我解析它时,它不会保留"e-n",除非它大于 6。 因此,结果是我得到一个存储在数组中的非科学记数法值。 有没有办法强制 parse() 函数保留它? 请参阅我在Visual Studio Code中从调试器运行的示例:

JSON.parse('[3.908e-3, -5.775e-7]');
Array[2] [0.003908, -5.775e-7]
JSON.parse('[3.908e-4, -5.775e-7]');
Array[2] [0.0003908, -5.775e-7]
JSON.parse('[3.908e-5, -5.775e-7]');
Array[2] [0.00003908, -5.775e-7]
JSON.parse('[3.908e-6, -5.775e-7]');
Array[2] [0.000003908, -5.775e-7]
JSON.parse('[3.908e-7, -5.775e-7]');
Array[2] [3.908e-7, -5.775e-7]

第二个问题是另一个格式问题。 JSON.parse似乎没有保留小数。 就像上面的第一个问题一样,是否有可能使 JSON.parse() 完全保留给定的数字表示法? 请注意解析是如何切断零小数的。

JSON.parse('[1.0, 2.0]')
Array[2] [1, 2]

正在阅读齐磊函数,您可以将其作为第二个参数传递给 parse() 函数,但我对这些有点迷茫。 我是否需要编写自己的自定义函数来保持格式不变?

编辑:提供更多信息: 我正在尝试按原样获取复杂的JSON对象,并将整个结构存储在我的Postgresql数据库中。文件本身最初作为 Uint8Array 上传。 然后我对此执行 toString(),并对结果执行 JSON.parse。 因此,如果这是上传文件的原始内容,我可以这样做:

uploadedFile.toString();
"{
"someKey": {
"id": "COG32",
"control_id": "00D2FFFF0000",
"coefficients": [3.908e-3, -5.775e-7]
}
}"

然后我可以这样做:

JSON.parse(uploadedFile.toString());
{
"someKey": {
"id": "COG32",
"control_id": "00D2FFFF0000",
"coefficients": [3.00908, -5.775e-7]
}
}

我得到的文件中的一些属性包含两个科学记数法值的数组。

为此,我将 json 字符串解析为一个对象,并能够迭代键及其所有属性,以将所有内容存储在数据库中自己的记录中。 这一切都很好用,除了 JSON.parse 会自动将 3.908e-3 转换为 3.003908。
我还需要从数据库中完全按照提供给我的方式重新创建这个 json 对象。 我知道它们是"相同"的数字。 但是当涉及到差异文件(原始json对象和我从数据库重新创建的文件......)时,它们非常不同。 .toExponential() 似乎给了我数字的指数变体,但采用字符串格式。 如果我使用它,我最终会得到:

["3.908e-3", "-5.775e-7"]

当我想要的是:

[3.908e-3, -5.775e-7]

在 JSON 中,数据存储为 NUMBER 类型;当您写入 3.908e-4 时,它等于 0.0003908。

然后,您有 2 个选择:

  • 将数据存储为字符串,以便保持格式(如果您不想执行计算,则可以)JSON.parse('["3.908e-3", "-5.775e-7"]');
  • 打印数据时强制使用格式,例如 (0.0004345).toExponential() --> 4.345e-4 或 (1).toFixed(1) --> 1.0;

相关内容

最新更新