作者vanillastarp (小皮)
看板Ajax
标题[问题] Node.js 资料处理
时间Wed Jan 29 23:07:53 2014
各位好,在Google一直搜寻解答方法,但是一直都没成果
所以来这边请教一下问题:
我想把一个档案的内容变成JSON格式
档案内容:
1 中文
2 or
3 &&
4 ABC
5 CD
...
想转成JSON格式:
{'1':'中文',
'2' :'or',
'3' :'&&',
'4' :'ABC',
'5' :'CD'
...
}
有试过用replace所有的符号
但是会有出错的状况
感谢各位:)
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 220.132.199.232
1F:→ mmis1000:regex? 01/29 23:55
2F:→ mmis1000:如果是utf8,应该可以直接用regex处理 01/30 00:02
3F:→ mmis1000:big5的话,因为编码区有部分跟低位符号重叠,会导致问题 01/30 00:04
4F:→ vanillastarp:感谢楼上回覆 可以问一下怎麽下regex吗? (regexp苦手 01/30 01:07
6F:→ mmis1000:但可以的话,最好用内建的元件生成json,以免导致问题 01/30 01:29
7F:→ mmis1000:自己刻的话,一定要确保特殊符号都有被编码,以免挖洞 01/30 01:30
8F:→ danny8376:这边的话会建议先把当档案转成Object 01/30 03:52
9F:→ danny8376:然後再用JSON.stringify去转成JSON 01/30 03:52
10F:→ danny8376:这样问题会比较少 01/30 03:52
12F:→ vanillastarp:补充: 这个档案是 utf-16 LE 的 (HEX头两组 FF FE 01/30 11:08
13F:推 mmis1000:如果空格数不确定,用split会有问题 01/31 17:03
最近因为跑出去玩 所以这段时间都闲置
感谢各位的意见 我已使用以下的方法:
var fs = require('fs'),
Iconv = require('iconv').Iconv;
var box = {};
var buffer = fs.readFileSync(__dirname + '\\db\\text.txt'),
iconv = new Iconv( "UTF-16", "UTF-8");
var result = iconv.convert(buffer).toString("utf8");
var jsonString = "{"
var lines = result.split("\n");
for(var i = 0;i < lines.length - 1;i++){
var fields = lines[i].split("\t");
var tmp = parseInt(fields[0]);
//例外名单 去除含有特殊符号
if((tmp == 2392)||(tmp == 2393)||(tmp == 2394)||(tmp == 2395)||
(tmp == 2811)||(tmp == 2832)||(tmp == 6425)||
(tmp == 6426)||(tmp == 6427)||(tmp == 6428))
continue;
jsonString += '"' + parseInt(fields[0]) + '":"' + fields[1].substr(0,fields[1].length - 1) + '",';
}
jsonString += '"99999":"none"}';
box = JSON.parse(jsonString);
感谢各位的帮助
※ 编辑: vanillastarp 来自: 220.132.199.232 (02/04 18:53)
14F:→ mmis1000:给个小建议,用['1','2','3'].join('')会比'1'+'2'+'3' 02/05 00:29
15F:→ mmis1000:来得有效率,虽然少量资料应该差不了多少就是了 02/05 00:30