任何人都可以帮我弄清楚我面临的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]
答案 0 :(得分:0)
在您的JSON中,数据存储为NUMBER类型;当你写3.908e-4时,它等于0.0003908。
然后您有两个选择: