T

Text Machine

強力なテキストツールを、ブラウザで

CSVをJSONに変換

CSVやTSVをブラウザ内でそのままきれいなJSONに変換できます。先頭行がキーになり、区切り文字は自動で判定されます。各値をテキストのまま残すか、数値と真偽値を型変換するかを選べます。データはどこにもアップロードされません。

区切り文字

出力

先頭行が各オブジェクトのキーになります。

CSV
JSON

変換されたJSONがここに表示されます。

CSVをJSONに変換 の使い方

  1. 1

    CSVを貼り付ける

    1行に1レコードとなるようにCSVまたはTSVデータを貼り付けます。列名を先頭行に置くと、その名前がキーになります。

  2. 2

    区切り文字を選ぶ

    自動のままにすればカンマ・セミコロン・タブを自動で判定します。必要に応じて、データに合った区切り文字を直接選ぶこともできます。

  3. 3

    出力の形を選ぶ

    「オブジェクト」を選ぶと各行がヘッダーをキーとするオブジェクトになり、「行」を選ぶと各行がそのまま単純な配列になります。値を「型付き」に切り替えると、数値と真偽値が本来のJSON型として読み込まれます。

  4. 4

    JSONをコピーする

    整形済みのJSONをコピーして、コードやAPIリクエスト、設定ファイルにそのまま貼り付けられます。

CSVをJSONにパースする: ヘッダー、型、そして不規則さ

CSVは単純に見えてそうではない

コンマ区切りのファイルは些細に見えます。値、コンマ、改行。しかしその単純さは罠です。CSVには公式で普遍的に強制される標準がなく、RFC 4180 は一般的な慣習を文書化していますが、エクスポーターは引用、行末、区切り文字について見解が一致していません。難しいケースは、まさにコンマでの素朴な分割が間違えるものです。それ自体がコンマを含む値、引用符を含む値、複数の行にまたがる値です。

本物のパーサーは、ただテキストを分割するのではなく引用のルールを読むことでそれらを扱います。二重引用符で囲まれたフィールドは、合法的にコンマやエスケープされた引用符(二重引用符を2つ続けて書く)を含むことができ、このツールはまさにそれを尊重します。"Portland, Oregon" を保持するセルは2つの列になるのではなく1つの値のまま保たれ、フィールドの中の二重にされた引用符は1つの文字どおりの引用符にまとめられます。このツールが再構築しない唯一のケースは、引用符の中に改行を持つ値です。まずファイルを行ごとにレコードへと分割するからです。ですから変換の前に、各レコードをそれ自身の行に保つか、セル内の改行を取り除いてください。

出力の形: オブジェクトの配列

表の自然なJSONの形は、1つのデータ行につき1つのオブジェクトからなる、オブジェクトの配列です。CSVの最初の行はヘッダーとして扱われ、各ヘッダーのセルがすべてのオブジェクトで共有されるキーになります。name、role、city という3つの列に続いて2つのデータ行を貼り付けると、それぞれその3つのキーをその行の値に対応づけた、2つのオブジェクトの配列が得られます。これはほとんどのAPIやインポートスクリプトが期待する形です。

もしデータにヘッダー行がなければ、その対応づけはキーを引き出す元がありません。行(rows)の出力モードに切り替えると、各行は代わりに値のプレーンな配列になり、名前を考え出すことなく生の格子を保ちます。前もって正しい出力モードを選べば、たまたま最初のデータ行をキーにされたオブジェクトを避けられます。

あなたがそうでないと指定するまで、すべては文字列である

これはCSVを読むときの単一で最も重要な注意点です。フォーマットは型の情報をまったく運びません。すべてのセルはテキストです。介入なしでは、数値の 42 は文字列の 42 になり、単語の true は文字列の true になり、空のセルは空の文字列になります。それらのフィールドから本物の数値や真偽値を期待するコードは、ひそかに誤動作します。

型付きの値を有効にすると、パーサーはプレーンな数値テキストをJSONの数値に、単語の true と false を真偽値に、単語の null を本物の null に格上げします。型の推論は便利ですが本質的に経験則なので、際どいところに注意してください。先頭にゼロのある識別子、電話番号、郵便番号、バージョンのような文字列は、技術的には数値に見えますが、たいていテキストのままにすべきです。それらのフィールドで正確さが重要なときは、値をテキストのまま保ち、自分のコードの中で意図的に変換してください。

区切り文字の検出とTSV

すべての区切り値ファイルがコンマを使うわけではありません。多くのヨーロッパのロケールの表計算は、コンマが小数点なのでセミコロンでエクスポートし、表計算から範囲をそのままコピーすると、たいていタブ区切りの値になります。Auto モードは入力の最初の行を調べ、そこにコンマ、セミコロン、タブのうち最も多く現れるものを選ぶので、コンマのファイル、セミコロンのファイル、TSV のどれも、設定を変えずに変換できます。

自動検出はきれいなデータには信頼できますが、最初の行がたまたま本当の区切り文字より別の区切り文字を多く含むファイルにはだまされることがあります。列が正しく出てこない場合は、推測を上書きして区切り文字を明示的に設定してください。それで曖昧さが一手で取り除かれます。

エンコーディング、BOM、そのほかの見えない厄介者

表計算ソフトからエクスポートされたファイルは、しばしばバイトオーダーマーク、すなわちファイルのいちばん先頭にある見えない文字で始まります。そのまま放置すると、それが最初のヘッダー名にくっつくので、id であるべきキーがひそかに少し違う文字列になり、id による検索が外れます。OS間で一貫しない行末や末尾の空行は、幻の行や1つずれた列を生み出す、もう1つのいつもの容疑者です。

このツールはすべてのヘッダーとセルを切り詰めるので、いつもの厄介者はおおむね自然に片付きます。Unix と Windows の両方の行末を許容し、先頭のバイトオーダーマークは切り詰め可能な空白として数えられるので、キーにくっつけられるのではなく最初のヘッダーから自動的に取り除かれます。これが、生の表計算のエクスポートをここに貼り付けるとたいていそのままうまくいく理由です。それでも変換後のキーがコードで一致を拒むなら、切り詰めが取り除かないような紛れ込んだ文字、たとえばゼロ幅スペースを疑い、ファイルをプレーンなUTF-8として再エクスポートしてください。

ふぞろいな行と空のセル

本物の表計算は雑然としています。末尾に空のセルを持つ行があったり、フィールドがまるごと欠けている行があったり、紛れ込んだ空行が末尾にこっそり入ったりします。行がヘッダーの数より少ない値を持つとき、欠けたフィールドは変換を破綻させるのではなく空の文字列として現れるので、出力の配列は長方形のまま保たれ、すべてのオブジェクトがキーの完全な集合を持ちます。

結果を信頼する前に、値が1列ずれて見える証拠となる行がないかざっと見てください。それは、上流のどこかで引用符のないフィールドの中にエスケープされていない区切り文字があることの兆候です。元のファイルを直す(問題の値を引用符で囲む)ほうが、後でJSONをつぎはぎしようとするよりもはるかに信頼できます。

CSVからJSONへの変換が役立つ場面

最もよくある用途は、誰かが渡してきた表計算を、プログラムが消費できるデータに変えることです。データベースに初期データを入れたり、APIリクエストの本体を組み立てたり、設定ファイルを生成したり、テストのフィクスチャに供給したりします。開発者でない人は表計算の中で生き、開発者はJSONの中で生きており、この変換は、毎回使い捨てのパーサーを書くことなく両者をつなぐ橋です。

パースのすべてがブラウザの中で実行されるので、顧客リスト、内部のメトリクス、財務の行といった機密のエクスポートでも、何も第三者のサービスにアップロードせずに変換できます。下流の安全のために1つのルールを心に留めてください。各列を型付きにすべきかテキストのまま残すべきかを意識的に決めることです。ひそかな型の強制は、インポートされたデータが表計算で見えていたものと違う振る舞いをする最もよくある理由だからです。

よくある質問

CSVをJSONに変換するにはどうすればよいですか?
列名を先頭行に置いたCSVを貼り付けると、整形済みのJSONがすぐ下に表示されます。コピーボタンで結果を取得してください。すべての処理はブラウザ内で実行されます。
先頭行は必ずヘッダーにする必要がありますか?
「オブジェクト」モードでは先頭行がすべてのオブジェクトのキーとして使われます。データにヘッダーがない場合は「行」モードに切り替えてください。そうすると各行が値だけの単純な配列になります。
カンマだけでなくタブやセミコロンも読み込めますか?
はい。自動モードはカンマ・セミコロン・タブ区切りのデータを判定するため、スプレッドシートからコピーしたデータもヨーロッパ式のCSVも、設定を変えずにそのまま変換できます。
数値と真偽値はどのように扱われますか?
標準ではすべての値が文字列のままになります。値を「型付き」に切り替えると、通常の数値はJSONの数値として、true と false は真偽値として、null という語は本来の null として読み込まれます。
入力したデータはどこかにアップロードされますか?
いいえ。変換はすべてブラウザ内のJavaScriptで実行されるため、CSVが端末を離れることはなく、サーバーに保存されるものもありません。

関連ツール

こちらの便利なツールもどうぞ

JSON ↔ CSV 変換

Unixタイムスタンプ変換

JSON ↔ YAML 変換

テキスト ↔ バイナリ変換

テキスト ↔ 16進数変換

モールス信号変換