我有一个从PhpMyAdmin导出的Json文件。我需要将它转换为javascript对象,甚至更好地转换为javascript数组。我正在使用 Nodejs模块 fs.readFile()
来读取文件和Json.parse()
函数以将字符串转换为对象,但此函数在找到前导零的数字时会挂起。我需要将数字转换为字符串。任何建议都会非常感激。
这是直接从PhpMyadmin导出的json文件的内容:
[{"id": 1,"country": 0,"code":056897,"customer":"Joe Harris"},{"id": 2,"country": 2,"code":054597,"customer":"Frank Foe"}]
我想在带有node:
的Javascript对象中进行转换 var fs = require('fs');
var docs = fs.readFile('dbfiles/countries.json','utf8', function (err, data) {
if (err) throw err;
//code needed here to convert numbers with leading zero in string
var docsJsonData = JSON.parse(data);
});
答案 0 :(得分:0)
JSON不允许前导零号参见rfc4267第2.4节。也就是说,如果你有一个前导零的数字,那就不是JSON。
如果你真的需要解析这个文件,你可以用exports =
之类的东西作为前缀,但是不能保证这会按预期工作,因为javascript可能会将前导零视为八进制数的符号,如果没有使用超过7的数字:例如017 === 15
,但018 === 18
答案 1 :(得分:0)
我知道这看起来很奇怪,但我经常用来将数字转换为字符串的最快解决方案是str = num+''
。
这里有一些其他案例和演出 http://jsperf.com/scunliffe-number-to-string
答案 2 :(得分:0)
理想情况下,如果你可以让phpMyAdmin发出有效的JSON,那将是最好的选择。
但是,您可以使用正则表达式进行一些合理的自定义修正。例如,您提供的示例:
// data is from the file
// match on "code":0####
var fixCode = /"code":(0[0-9]+),/g;
var results = JSON.parse(
data.replace(fixCode, function(match, code) {
// rebuild the "code" property with quotes
// (or convert to a VALID number):
return '"code": "' + code + '", ';
}));
结果:
[ { id: 1,
country: 0,
code: '056897',
customer: 'Joe Harris' },
{ id: 2,
country: 2,
code: '054597',
customer: 'Frank Foe' } ]
答案 3 :(得分:-1)
我不知道这是否会对你有所帮助,但是对于转换包含带前导零的整数的字符串,你可以使用它:
var x = parseInt("00001000",10);
...这将正确地将1000作为整数值放入x。