nodejs json.parse保留科学记数法

时间:2017-07-05 20:23:44

标签: javascript json node.js parsing

任何人都可以帮我弄清楚我面临的JSON.parse()问题吗?这是利用Node.js v6.9。

基本上,我需要在我的数据库中存储一些数据,正如我在文件中看到的那样。虽然我的绝大多数工作都在工作,但我想解决一些问题。

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

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()函数的reviver函数,但我对它们有点迷失。我是否需要编写自己的自定义函数来保留格式?

编辑:提供的更多信息: 我正在尝试按原样使用复杂的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对象 EXACTLY 。我知道他们是“相同”的数字。但是当涉及到差异文件(原始的json对象和我从数据库中重新创建的对象......)时,它们是非常不同的。 .toExponential()似乎给了我数字的指数变量,但是以字符串格式。如果我要使用它,我会结束:

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

当我想要的是:

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

1 个答案:

答案 0 :(得分:0)

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

然后您有两个选择:

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