[問題] Node.js 資料處理

看板Ajax作者 (小皮)時間10年前 (2014/01/29 23:07), 編輯推噓2(2013)
留言15則, 4人參與, 最新討論串1/1
各位好,在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

01/29 23:55, , 1F
regex?
01/29 23:55, 1F

01/30 00:02, , 2F
如果是utf8,應該可以直接用regex處理
01/30 00:02, 2F

01/30 00:04, , 3F
big5的話,因為編碼區有部分跟低位符號重疊,會導致問題
01/30 00:04, 3F

01/30 01:07, , 4F
感謝樓上回覆 可以問一下怎麼下regex嗎? (regexp苦手
01/30 01:07, 4F

01/30 01:27, , 5F
01/30 01:27, 5F

01/30 01:29, , 6F
但可以的話,最好用內建的元件生成json,以免導致問題
01/30 01:29, 6F

01/30 01:30, , 7F
自己刻的話,一定要確保特殊符號都有被編碼,以免挖洞
01/30 01:30, 7F

01/30 03:52, , 8F
這邊的話會建議先把當檔案轉成Object
01/30 03:52, 8F

01/30 03:52, , 9F
然後再用JSON.stringify去轉成JSON
01/30 03:52, 9F

01/30 03:52, , 10F
這樣問題會比較少
01/30 03:52, 10F

01/30 10:26, , 11F
01/30 10:26, 11F

01/30 11:08, , 12F
補充: 這個檔案是 utf-16 LE 的 (HEX頭兩組 FF FE
01/30 11:08, 12F

01/31 17:03, , 13F
如果空格數不確定,用split會有問題
01/31 17:03, 13F
最近因為跑出去玩 所以這段時間都閒置 感謝各位的意見 我已使用以下的方法: 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)

02/05 00:29, , 14F
給個小建議,用['1','2','3'].join('')會比'1'+'2'+'3'
02/05 00:29, 14F

02/05 00:30, , 15F
來得有效率,雖然少量資料應該差不了多少就是了
02/05 00:30, 15F
文章代碼(AID): #1IwHbBtB (Ajax)