[Tips] JavaScriptでCSVを読み込んでJSONを作る

2022.08.30

この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。

JavaScriptでCSVファイルを読み込んでJSONを作る簡単なサンプルを示します。

const csvFilePath = '[CSVファイルのパス]'
const jsonFilePath = '[JSONファイルのパス]'

const csv = require('csvtojson')
const moment = require('moment')
const fs = require('fs')

csv()
.fromFile(csvFilePath)
.then((rows)=>{
  rows = rows.map((row) => {
    row.id = new Number(row.id)
    row.success = new Boolean(row.success)
    row.registrationDate = moment(row.registrationDate).format("YYYY-MM-DD")
    return row
  })
  fs.writeFile(jsonFilePath, JSON.stringify(rows, null, 2), (err) => {
    if (err) {
      throw err;
    }
    console.log("JSON generated.");
  })
})

csvtojsonを使うのが簡単です。

CSVファイルに次の内容を用意すると、

id,success,registrationDate
1,true,2022/01/03
2,false,2022/08/30
3,true,2022/12/13

次のJSONファイルが生成されます。

[
  {
    "id": 1,
    "success": true,
    "registrationDate": "2022-01-03"
  },
  {
    "id": 2,
    "success": true,
    "registrationDate": "2022-08-30"
  },
  {
    "id": 3,
    "success": true,
    "registrationDate": "2022-12-13"
  }
]

map処理の中で、各行のデータ(row)に対して、idは数値として扱い、successは論理値として扱い、registrationDateは日付のフォーマット変換を行うためにnew Number()new Boolean()moment().format("YYYY-MM-DD")にそれぞれ通しています。これらを通さないと、idやsuccessはそれぞれ文字列としてJSONに出力されます。文字列として出力というのは、次のように"(ダブルクォート)で囲まれた値で出力されることを指します。

[
  {
    "id": "1",
    "success": "true",
    "registrationDate": "2022-01-03"
  },
  {
    "id": "2",
    "success": "true",
    "registrationDate": "2022-08-30"
  },
  {
    "id": "3",
    "success": "true",
    "registrationDate": "2022-12-13"
  }
]