CSVをテンプレートに変換

改行付きCSVを整形してJSONにし、更にKeyValueをテンプレートに落としこむ

Googleスプレッドシートから改行付きセル内容を範囲コピペすると以下の様なエセccvのテキストデータが得られる

view source

JavaScript

$(function(){
  csv2json2tmpl();
  $('button').on('click', function(){
    csv2json2tmpl();
  });
});


var csv2json2tmpl = function(){

  var csv = $('#csv').val();
  csv = fixBreakCSV(csv);
  var json = csv2json(csv);
  $('#json').val(JSON.stringify(json, null ,2));
  var template = $('#template').val();
  var result = json2tmpl(json, template);
  console.log(result);
  $('#templateResult').val(result);
}

//JSONをテンプレートに
var json2tmpl = function(json, template){
  var result = '';
  json.forEach(function(obj){
    result += template.replace(/\$\{([^}]*)\}/g, function(){
     //console.log(arguments[1]);
      return obj[arguments[1]] || '';
    });
  });
  return result;
}


//CSVをJSONに
var csv2json = function(csv){
  var lines = csv.split('\n');
  var keys = lines.shift().split(',');
  var json = [];
  lines.forEach(function(line){
    if(!line){return;}
    var hash = {};
    var rows = line.split(',');
    rows.forEach(function(col, i){
      col = col.replace(/\\n/g, '\n');
      hash[keys[i]] = col;
    });
    json.push(hash);
  });
  console.log(json);
  return json;
}


//改行付き文字列(ダブルクオーテーション付き)を整形
var fixBreakCSV = function(csv){
  var new_csv = '';
  var escapeNum = 0;
  var isQuat = false;
  var charList = csv.split('');
  charList.forEach(function(char){
    if(char === '\\'){
      escapeNum = 2;
    }
    escapeNum--;
    if(char === '"' && escapeNum < 0){
      isQuat = !isQuat;
      return;
    }
    if(isQuat && char === '\n'){
      console.log(char);
      char = '\\n';
    }
    new_csv += char;
  });
  new_csv = new_csv.replace(/\\"/g, '"');
  return new_csv;
}

CSS

HTML

ページのソースを表示 : Ctrl+U , DevTools : F12

view-source:https://hi0a.com/demo/-js/js-csv-to-json-template/

ABOUT

hi0a.com 「ひまアプリ」は無料で遊べるミニゲームや便利ツールを公開しています。

プログラミング言語の動作デモやWEBデザイン、ソースコード、フロントエンド等の開発者のための技術を公開しています。

必要な機能の関数をコピペ利用したり勉強に活用できます。

プログラムの動作サンプル結果は画面上部に出力表示されています。

環境:最新のブラウザ GoogleChrome / Windows / Android / iPhone 等の端末で動作確認しています。

画像素材や音素材は半分自作でフリー素材配布サイトも利用しています。LINK参照。

動く便利なものが好きなだけで技術自体に興味はないのでコードは汚いです。

途中放置や実験状態、仕様変更、API廃止等で動かないページもあります。