将文本文件转换为干净的JSON格式

时间:2014-05-09 07:28:00

标签: json node.js

我想读取一个文本文件并以干净的JSON格式编写文本文件。

我的文字文件如下所示

Version:2
TaxiStation:6072
TaxiLicense:EM9543
System_ID:910

当我使用以下内容时:

data2= JSON.stringify(data2, null, position+1);
fs.writeFile(dirarray[0], data2, function(err) { ...

我的输出总是很丑陋:"Version:2\r\nTaxiStation:6072\r\nTaxiLicense:EM8378\r\n

理想情况下,我希望将我的文本文件格式化得很好。是否有可能实现这一目标?

{
   "Version":2,
   "TaxiStation":6072,
   "TaxiLicense":"EM9543",
   "System_ID":910
}

2 个答案:

答案 0 :(得分:3)

在进行字符串化之前,请使用类似的内容转换数据:

data2 = data2.split(/\r?\n/).reduce(function(m,i){
    var s = i.split(':');
    m[s.shift()] = s.join(':');
    return m;
}, {});

JSON.stringify(data2);

答案 1 :(得分:-1)

主要问题是stringify函数将获取js对象并对其进行jsonize,但是您的文件不是对象,数组或任何东西,因此,一旦读取,它就会被解释为单个字符串。所以它被解析为一个字符串!

你应该从你的文件中创建一个与你的行匹配的js对象,然后解析它。

这是一个有效的例子:http://pastebin.com/EhnhNUyB

主要部分在这里

dataArr = data2.split('\n');

var obj = {};

for (i=0;i<dataArr.length;i++) {
    keyVal = dataArr[i].split(":");

    var key = keyVal[0];

    var val;
    if(isInt(keyVal[1])) {
        val = parseInt(keyVal[1]);
    } else {
        val = keyVal[1];
    }
    obj[key] = val;
}

data2 = JSON.stringify(obj, null, 4);

正如您所看到的,我已经创建了一个新对象,并向其推送了新的键值。