我想读取一个文本文件并以干净的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
}
答案 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);
正如您所看到的,我已经创建了一个新对象,并向其推送了新的键值。