检查json值是否与前导零的数字匹配,并将其转换为字符串

时间:2013-11-17 15:10:59

标签: javascript json node.js

我有一个从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);

 });

4 个答案:

答案 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。