mygems

CSVをJSONに変換

1行が1オブジェクト、見出しがキーに。

  • 配列・JSON Lines・配列の配列
  • 数値と真偽値を判別
  • IDは文字列のまま
  • アップロードなし

1.ファイルを開く

CSVまたはTSV。ここにドラッグするか、ファイルを選択してください。

作った理由

CSVからJSONへの変換は簡単そうに見えます。よくある変換ツールは、型を間違えることで簡単にしています。すべてが文字列になるか、数値に見えるものがすべて数値になってしまうのです。先頭にゼロのある郵便番号や、JavaScriptでは正確に表せない18桁のIDも例外ではありません。このツールは、各列の型をすべての値から判定し、数値に見えるだけの列には手を加えません。

できること

  • 見出し行をキーにしたオブジェクトの配列、1行に1オブジェクトのJSON Lines、見出しを先頭にした配列の配列のいずれかで書き出します。
  • すべての値が数値またはtrue/falseの列を判別し、引用符なしで書き出します。
  • 先頭にゼロがある列や15桁を超える列は、JSONの数値にすると値が変わってしまうため、文字列のままにします。
  • 空のセルは空文字列ではなくnullにします。すべてを文字列のままにすることもできます。
  • 読みやすいようにインデントするか、最小サイズで書き出すかを選べます。

どの形式を選ぶか

オブジェクトの配列は、ほとんどのAPIやJavaScriptのコードが想定する形式です。JSON Linesは、大きなファイルや、BigQuery、Elasticsearch、jqのように1レコードずつ処理するデータツールに向いています。配列の配列は最もコンパクトで、列の順序がはっきり残ります。

よくある質問

IDの列が文字列のままなのはなぜですか?
数値にすると値が変わってしまうからです。先頭のゼロはどのJSONパーサーでも消えますし、15〜16桁を超える整数はJavaScriptで精度が落ちます。列のすべての値がそのどちらにも当てはまらない普通の数値であれば、数値として書き出されます。
空のセルはどうなりますか?
型の判別をオンにしている場合はnullになります。CSVには、空文字列と欠損値を区別する方法がないためです。判別をオフにすると、空のセルも含めてすべての値が文字列になります。
入れ子のJSONにも対応していますか?
CSVは平坦な形式なので、出力されるJSONも平坦で、1レコードにつきキーが1階層だけです。逆に、入れ子のJSONをCSVにしたい場合は、「JSONをCSVに変換」ツールを使ってください。