備忘録

webの備忘録のために

csv → json形式に変換

仕事でcsvファイルをjson配列に変換するって事があったので、
今のうちにやっておこうということで、コードを作ってみた。

CSVデータ】

company_cd,company_name,company_name_r,prefecture_name,company_url
1,トヨタ自動車,トヨタジドウシャ,愛知,http://www.jrhokkaido.co.jp/
2,日産,ニッサン,神奈川,http://www.jreast.co.jp/


Javascript

// Getcsv
function getCSV(){
    var req = new XMLHttpRequest(); // HTTPでファイルを読み込むためのXMLHttpRrequestオブジェクトを生成
    req.open("get", "js/data.csv", true); // アクセスするファイルを指定
    req.send(null); // HTTPリクエストの発行
    var result = []; // 最終的な二次元配列を入れるための配列
    
    req.onload = function(){
        var str = req.responseText; //csvを文字列として取得
        var tmp = str.split("\n"); // 改行を区切り文字として行を要素とした配列を生成
        // 各行ごとにカンマで区切った文字列を要素とした二次元配列を生成
        for(var i=0;i<tmp.length;++i){
            result[i] = tmp[i].split(',');
        }
    } 
}

// changeJson
function changeJson(csvArray){
    var jsonArray = []; //配列の変数を生成
        
    // 1行目から「項目名」の配列を生成
    var items = csvArray[0].split(',');

    // CSVデータの配列の各行をループ処理
    //// 配列の先頭要素(行)は項目名のため処理対象外
    for (var i = 1; i < csvArray.length; i++) {
        var a_line = new Object();
        // カンマで区切られた各データに分割する
        var csvArrayD = csvArray[i].split(',');
        //// 各データをループ処理する
        for (var j = 0; j < items.length; j++) {
        // 要素名:items[j]
        // データ:csvArrayD[j]
        a_line[items[j]] = csvArrayD[j];
        }
        jsonArray.push(a_line);
    }
    console.debug(jsonArray);
    return jsonArray;
}

getCSV();

【結果】
f:id:the_cabs:20180211141300p:plain

できたっぽい。