CSV文字列をJSONオブジェクトに変換
CSV文字列をJSONオブジェクトに変換するには、次のような方法で実装できます。
- ※ 区切りではなく文字としてのカンマは考慮していません。
- ※ 文字として使用しているダブルクォーテーションは考慮していません(エスケープされているダブルクォーテーション)。
- ※ 数字は文字列として扱います。
関数定義
JavaScript (ES5以前)
/**
* CSV文字列をJSONオブジェクトに変換
* @param {string} csvStr CSV文字列
* @param {object} userOptions ユーザー設定
* @return {object[]} JSONに変換されたオブジェクトを返す
* CSV文字列をJSONオブジェクトに変換
*/
var csvToJson = function(csvStr, userOptions) {
if (typeof csvStr !== 'string') return [];
var options = { header : 0, columnName : [], ignoreBlankLine : true };
if (userOptions) {
if (userOptions.header) options.header = userOptions.header;
if (userOptions.columnName) options.columnName = userOptions.columnName;
}
var rows = csvStr.split('\n'),
json = [], line = [], row = '', data = {},
j, len2;
for (var i = 0, len = rows.length; i < len; i++) {
if (i + 1 <= options.header) continue;
if (options.ignoreBlankLine && rows[i] === '') continue;
line = rows[i].split(',');
if (options.columnName.length > 0) {
data = {};
for (j = 0, len2 = options.columnName.length; j < len2; j++) {
if (typeof line[j] !== 'undefined') {
row = line[j];
row = row.replace(/^"(.+)?"$/, '$1');
} else {
row = null;
}
data[options.columnName[j]] = row;
}
json.push(data);
} else {
json.push(line);
}
}
return json;
};
JavaScript (ES6以降)
/**
* CSV文字列をJSONオブジェクトに変換
* @param {string} csvStr CSV文字列
* @param {object} userOptions ユーザー設定
* @returns {object[]} JSONに変換されたオブジェクトを返す
* CSV文字列をJSONオブジェクトに変換
*/
const csvToJson = function(csvStr, userOptions = {}) {
if (typeof csvStr !== 'string') return [];
const options = Object.assign({
header : 0,
columnName : [],
ignoreBlankLine : true
}, userOptions);
const json = csvStr.split('\n').reduce(function(json, row, i) {
if (i + 1 <= options.header) return json;
if (options.ignoreBlankLine && row === '') return json;
const line = row.split(',');
if (options.columnName.length > 0) {
json.push(options.columnName.reduce(function(data, name, i) {
data[name] = typeof line[i] !== 'undefined' ? line[i].replace(/^"(.+)?"$/, '$1') : null;
return data;
}, {}));
} else {
json.push(line);
}
return json;
}, []);
return json;
};
使い方
引数
| 引数名 | 型 | 説明 | |
|---|---|---|---|
| 第一引数 必須 |
csvStr | string | CSV形式の文字列を指定。 |
| 第二引数 | userOptions | Object | 様々なオプションを設定できる。 詳しくは 第二引数:オプションを参照。 |
第二引数:オプション
| プロパティ名 | 型 | 初期値 | 説明 |
|---|---|---|---|
| header | number | 0 | 除外するヘッダーの行番号を指定する。1を指定した場合は1行目、3を指定した場合は1行目から3行目、0を指定した場合は除外しない。 |
| columnName | string[] | [] | CSVの列に一致するカラム名(キー)を指定する。 |
| ignoreBlankLine | boolean | true | 空白行を除外するかどうかを指定する。 |
戻り値
変換されたオブジェクトを返します。
サンプルコード
JavaScript
var csv = 'ID,氏名,年齢\n';
csv += '1,"佐藤 健",23\n';
csv += '2,"鈴木 美咲",19\n';
csv += '3,"高橋 翔",28';
var json = csvToJson(csv, {
header : 1,
columnName : ['id', 'name', 'age']
});
alert(json[0].name);
JavaScript
const csv = `ID,氏名,年齢
1,"佐藤 健",23
2,"鈴木 美咲",19
3,"高橋 翔",28`;
const json = csvToJson(csv, {
header : 1,
columnName : ['id', 'name', 'age']
});
console.log(json);