JavaScriptでCSVデータ(項目行あり)をJSON形式に変換する

駅データ.jpの路線や駅のデータは、先頭行が項目名になっているCSV形式で提供される。こういった「項目行があるCSV形式」ファイルをJSONに変換する方法。項目行で指定される項目名を、そのままJSONデータのプロパティ名として利用する。(そのため、ファイルの種類によらず汎用的に使える。)

  • 入力データ (例) company20130120.csv
    company_cd,rr_cd,company_name,company_name_k,company_name_h,company_name_r,company_url,company_type,e_status,e_sort
    1,11,JR北海道,ジェイアールホッカイドウ,北海道旅客鉄道株式会社,JR北海道,http://www.jrhokkaido.co.jp/,1,0,1
    2,11,JR東日本,ジェイアールヒガシニホン,東日本旅客鉄道株式会社,JR東日本,http://www.jreast.co.jp/,1,0,2
    
  • コードイメージ
    // JavaScript
    // イベントハンドラ (ファイルがドロップされたら起動する)
    function loadedEkidata(event){
      event.preventDefault();
      var res = event.target.result;
      var d = res.split('\n'); // 1行ごとに分割する
      var jsonArray = csv2json(d); // JSON形式に変換
    }
    
    function csv2json(csvArray){
      var jsonArray = [];
    	
      // 1行目から「項目名」の配列を生成する
      var items = csvArray[0].split(',');
    
      // CSVデータの配列の各行をループ処理する
      //// 配列の先頭要素(行)は項目名のため処理対象外
      //// 配列の最終要素(行)は空のため処理対象外
      for (var i = 1; i < csvArray.length - 1; 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;
    }
    
  • 出力結果
    Online JSON Viewer_rw company

カテゴリー: Tips タグ: パーマリンク