JSON→CSV変換

JSONのオブジェクト配列をCSVの表に変換します。処理はすべてブラウザ内で行われます。

すべてブラウザ内で動作します。アップロード、記録、保存は一切行いません。

APIのレスポンスを貼り付けると、表計算ソフトで開ける表が得られます。配列のどこかに現れたキーはすべて列になります。処理はブラウザ内で行われるので、個人データでいっぱいのペイロードでも端末の外に出ることはありません。

仕組み

ドキュメントはオブジェクトの配列である必要があります。それが表、つまり1行1オブジェクトだからです。単独のオブジェクトは1行の表として受け付けます。それ以外のもの(単なる数値、文字列、文字列の配列)には行がないため、推測せずにそのことを知らせます。

ヘッダーは最初のオブジェクトのキーだけではなく、配列内のすべてのキーの和集合で、それぞれ最初に現れた順に並びます。最初のレコードに省略可能なフィールドが欠けているのは実際のAPIレスポンスによくある形で、1行目のキーだけを使うと、その列がすべての行から抜け落ちてしまいます。

ネストされたオブジェクトや配列は、追加の列に展開せず、JSONとしてそのセルに書き込みます。フラット化すれば見た目は整いますが、元に戻せません。ネストの形が異なる2つのレコードからは異なる列の組が生まれ、すでにドットを含むキーはネストされたキーと区別がつかなくなります。

nullは空のセルに、trueとfalseはtrueとfalseという単語になり、数値はJSONでの書き方のまま書き出されるので、出力時に値の形が変わることはありません。

例

ケース 入力 結果
最初のレコードにないキーにも列が作られる [{"id": 1}, {"id": 2, "note": "late"}] id,note 1, 2,late

よくある質問

ネストしたオブジェクトがセルの中にJSONとして表示されるのはなぜですか?

フラット化すると元に戻せないからです。あるレコードが3階層ネストしていて次のレコードが1階層なら、フラット化すると同じ配列から2種類の列の組ができてしまいます。また、すでにドットを含むキーはネストしたパスと区別できなくなります。構造をセルの中に保っておけば、逆に変換したときに元のデータが戻ってきます。

Excelで正しく開けますか?

ファイルよりも地域設定に左右されます。小数点にカンマを使う地域設定の表計算ソフトは区切り文字としてセミコロンを想定するので、区切り文字の一覧にセミコロンを用意しています。カンマ区切りのファイルが各行1列で開かれてしまう場合、それが原因です。

配列がオブジェクトの中にネストされています。なぜ失敗するのですか?

ドキュメント全体が行のリストになっていないからです。{"data": [...]} という形のAPIレスポンスでは、外側の入れ物ではなく配列そのものを貼り付ける必要があります。入れ物にはちょうど1行(それ自身)しかなく、変換するとすべてを含む1つのセルだけの表になってしまいます。

ドキュメントはどこかにアップロードされますか?

いいえ。ページはローカルで変換する小さなスクリプトを読み込みます。ページの読み込み後にネットワークから切断しても、ツールはそのまま動作します。

知っておきたいこと

  • 処理はすべてブラウザ内で行われます。ドキュメントがアップロード、記録、保存されることはありません。
  • 引用符の扱いはRFC 4180に従います。区切り文字、ダブルクォート、改行を含むフィールドは引用符で囲まれ、引用符で囲まれたフィールド内のダブルクォートは2つ重ねて書かれます。バックスラッシュは普通の文字であり、エスケープとして扱われることはありません。

出典

開発者向けのすべてのツール