2015-12-29 34 views
2

我想出瞭如何創建一個高級腳本來生成包含循環內容的JSON文件。在Node.js中高級寫入文件

我有一個簡單的.csv文件看起來像在這個截圖:

csv

A列是縣名單,列b爲城市的名單,在該行可以父。

Raw格式:

Los Angeles,"Los Angeles, Santa Monica, Burbank, Commerce" 
Kern,"California City, Bakersfield, Wasco" 
Santa Barbara,"Goleta, Santa Barbara, Solvang" 
Orange,"Anaheim, Costa Mesa, Irvine" 

我需要知道如何編寫腳本來生成與縣名JSON文件,然後加入城市內容的每個JSON文件。

除外輸出將是這些截圖:

output1

每個JSON文件應包含城市的名單裏面,看這個JSON格式。

json format

我有劇本,但它是破碎的,我不能研究,它一直像5小時。

任何建議,歡迎

避免重命名的錯誤,在這種情況下使用.replace(/ /g, '-')從空格來代替「 - 」

編輯:我打掃麪條代碼,我找不到我的最好的一個,但我認爲是

var lr = require('readline').createInterface({ 
    input: require('fs').createReadStream('source/counties.csv') 
}); 

lr.on('line', function (line) { 
    var names = rawFile.responseText.split("\n") 

    names.forEach(function(name) { 
     list.push({city: capitalizeFirstLetter(city), colony:name.replace(/(\r\n|\n|\r)/gm,"")}); 
    }) 
    console.log(JSON.stringify(list)); 
    var fileName = selected.replace(/ /g, '-').toLowerCase(); 
    fs.writeFileSync(fileName + ".json", ''); 
}); 
+1

向我們展示你有什麼到目前爲止 – Jordonias

+1

而你在執行這個過程中遇到的問題是......? – rafaelcastrocouto

回答

1

試試這個:

var fs = require('fs'); 

function writeToFiles(input) { 
    fs.readFile(input, function (err, data) { 
     if (err) throw err; 
     data = data.toString(); 
     data.split('\n').forEach(function (line) { 
      var parsed = line.split(/([\w ]+),"([\w ,]+)"/).filter(function (e) { 
       return !!e; 
      }); 
      var countryName = parsed[0]; 
      var cities = parsed[1]; 
      var cityArray = eval("['" + cities.split(",").join("', '") + "']"); 
      var result = []; 
      cityArray.forEach(function (e) { 
       result.push({ 
        country: countryName, 
        city: e.trim() 
       }); 
      }); 
      fs.writeFileSync('./' + countryName.replace(/[ ]/g, '-') + '.json', JSON.stringify(result, null, 4)); 
     }); 
    }); 
} 

它使用純粹的NodeJS,沒有別的。隨着你輸入,它給出了這樣的:

這是Los-Angeles.json

[ 
    { 
     "country": "Los Angeles", 
     "city": "Los Angeles" 
    }, 
    { 
     "country": "Los Angeles", 
     "city": "Santa Monica" 
    }, 
    { 
     "country": "Los Angeles", 
     "city": "Burbank" 
    }, 
    { 
     "country": "Los Angeles", 
     "city": "Commerce" 
    } 
] 

要使用它,這樣做:

writeToFiles('input.csv'); 
+0

它的工作,它是一個明確接受的答案,但你的帳戶發生了什麼? – Ivan

+0

@Ivan你可以找到創建賬戶並與他聊天的人(在這裏)(http://chat.meta.stackexchange.com/rooms/721/shadows-den),他在那裏被稱爲UniKitty。 :) –