LoginSignup
8
11

More than 1 year has passed since last update.

JavaScript CSV -> ObjectArray

Last updated at Posted at 2016-11-11

CSV(文字列)をObject配列に変換します

前提

個人的にライブラリに頼れるなら頼ったほうが良い派です。
勉強のためにとかライブラリ使えないだとかそういった感覚で読んでいただけると :bow:
2016年に書いたソース&記事みたいなので、リファクタ&リライト?してみました。

$ node -v
master
v14.15.0
$ npm -v
7.16.0

なんで変換したいの??

csv形式になっているのを読み込む時に
こんなんするの嫌だったからcsv->Objectの配列に変換するやーつ作りましたー。
多少の入れ子は耐えれるように作ったはず...はず.

var columns = line.split(",")
var id = columns[0]
console.log(id)

ソースコード

実行部分

index.js
import fs from 'fs'
import CsvUtils from './csvUtils.js'

const fileName = process.argv[2]
const fileBody = fs.readFileSync(`./data/${fileName}`, 'utf-8')
console.log('fileBody', fileBody)

const csv = new CsvUtils(fileBody)
const usres = csv.toObjectList()
console.log('usres:', JSON.stringify(usres, null, 2))

内部処理

csvUtils.js
// ソースコード公開しているので気になったら読んでください...決して面倒になったわけではないです...決して

使い方

$ npm run test:example

fileBody id,name,profile.birth.year,profile.birth.day,profile.blood,profile.address,hoge.fuga.hoge.fuga
1,ito,1990,06-06,O,Minato-Ku Tokyo,aaa
2,saito,1991,06-06,O,Minato-Ku Tokyo,aaa
3,naito,1991,06-06,O,Minato-Ku Tokyo,bbb

usres: [
  {
    "id": "1",
    "name": "ito",
    "profile": {
      "birth": {
        "year": "1990",
        "day": "06-06"
      },
      "blood": "O",
      "address": "Minato-Ku Tokyo"
    },
    "hoge": {
      "fuga": {
        "hoge": {
          "fuga": "aaa"
        }
      }
    }
  },
  ...
}]

以上。

GitHub

公開しました。
https://github.com/atsushi-ito-110/csv-utils-js

余談ですが

記事を書いた当時PHPをメインに触っていて、objectのことを連想配列と呼んでいてJSぽくない表現になってなんとも言えない気分になったことと、虎ノ門に勤めてたからテストデータが港区になってたことと、PHPでビルトインサーバ立ち上げてHTML+JSだったのもなんだか成長を感じられたというかなんというか

8
11
1

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
8
11