駅データ.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; }
- 出力結果