JSON CSVコンバータ

JSONオブジェクトの配列をCSVまたはTSV形式に変換します。

使い方

1. JSONオブジェクトの配列(または単一のオブジェクト)を入力エリアに貼り付けます。

2. 区切り文字を選択 · CSVにはカンマ、TSVにはタブ、または別の形式。

3. 変換をクリックしてCSV出力を生成します。

4. クリップボードにコピーするか、ファイルとしてダウンロードします。

ネストされたオブジェクトと配列は、CSV出力でJSON文字列としてシリアライズされます。すべての処理はクライアント側です · データがブラウザを離れることはありません。

JSONからCSVへの変換がこれほど一般的なワークフローである理由

JSONは現代のWeb APIにとって支配的なペイロード形式です。CSVは表形式データのための最低共通分母形式です。Excel、Google Sheets、SQL LOAD DATA、R、Pandas、Tableau、Power BI、そしてほぼすべてのETLパイプラインがCSVを即座に取り込めます。だからAPI出力がステークホルダーのためにスプレッドシートに着地する必要がある場合、または分析のためにデータベースに着地する必要がある場合、誰かがJSONを行に平坦化しなければなりません。このツールはその平坦化をあなたのブラウザで行い、サーバーへのラウンドトリップなし、潜在的に機密性の高いデータのアップロードなしで実行します。

CSV形式 (RFC 4180)

単一の正式なCSV標準はありませんが、RFC 4180 (2005年10月、「カンマ区切り値 (CSV) ファイルの共通形式とMIMEタイプ」) が業界における正典的な参照に最も近いものです。皆が同意するルール:

なぜ1つではなく4つの区切り文字なのか

デフォルトはカンマですが、各区切り文字は特定の問題を解決します:

ネストされたJSONの平坦化: 3つの戦略

JSONは階層的です; CSVはフラットです。両者の間に汎用的なロスレスマッピングはありません。入力がネストされたオブジェクトまたは配列を含む場合、すべてのコンバータは選択しなければなりません:

  1. JSON文字列としてインライン化。 ネストされた部分はJSONに再シリアル化され、単一のCSVセルに入れられます。このツールのデフォルトのアプローチ。ロスレス; ラウンドトリップに安全; 構造が必要な場合、消費者は内部のJSONをパースする必要があります。
  2. ドット付きキー平坦化。 {address: {street, city}}address.streetaddress.cityの列になります。Pandasのjson_normalizeはこの方法で動作します。アナリストにとってよりクリーンですが、深くネストされたデータでは列数が爆発します。
  3. 行の爆発。 配列は複数の行になり、親フィールドが繰り返されます。{name: "Alice", tags: ["a", "b"]}は2つの行になり、両方ともname=Aliceです。一対多の関係に最適; 「1行あたり1レコード」のメンタルモデルを失います。

ドット付きキーまたは行爆発の出力が必要な場合は、貼り付ける前にJSONを前処理してください。小さなPython / Nodeスクリプトを介してまたはPandasのjson_normalizeを介して。

ヘッダー、型のラウンドトリッピング、そしてExcelのオートフォーマットの罠

JSONには実際の型システム (数値、文字列、ブール、null、配列、オブジェクト) があります; CSVには文字列しかありません。慣習は、消費者が文脈から型を推論することです。ツールはすべての入力オブジェクトにわたるすべてのキーの和集合からヘッダー行を生成し、欠損フィールドを空のセルとして残し、ブール値をtrue/falseとして書き込み、JSON nullを空のセルとして書き込みます。

Excelは時に害をなす方法で役立ちます:

CSVインジェクション、知っておく価値のあるセキュリティ注意

CSVがExcelまたはGoogle Sheetsで開かれる場合、=+-、または@で始まるセルは数式として解釈されます。OWASPのCSV Injectionページはこの攻撃クラスを文書化しています。ユーザー提出フィールド内の=cmd|' /c calc'!A0のような悪意のある文字列は、管理者がエクスポートを開いたときにコマンドを実行する可能性があります。防御的な実践: それら4つの文字のいずれかで始まるセルにシングルクオートでプレフィックスするか、引用符と先頭のアポストロフィで囲みます。ユーザー生成コンテンツをエクスポートする場合、知っておくことが重要です。

コンバータが扱う一般的なエッジケース

このツールをいつ使うか

プライバシー

CSVエクスポートはほぼ常にPII、顧客記録、従業員データ、トランザクションログ、連絡先リストを含みます。サーバー側の変換は、すべてのレコードを第三者のインフラストラクチャを通して送信し、そこで転送ログ、サーバーログ、そして可能性としてはキャッシュされた応答に存在します。ブラウザベースの変換はデータをあなたのマシンに保持します。ここでの平坦化と引用のステップ全体は、あなたのブラウザ内のJavaScriptで行われます; 何もアップロードされません。

よくある間違い

  1. 聴衆に間違った区切り文字。 フランスのExcelユーザーにカンマCSVを送信すると、単一列のファイルが生成されます。区切り文字を受信者のロケールに合わせてください。
  2. 配列の代わりに単一オブジェクトを貼り付ける。 単一のオブジェクトはキーから列ヘッダーを持つ1行のCSVに変換されます。複数のレコードについては、配列で囲んでください。
  3. Pandasスタイルの平坦化を期待する。 このツールのネストされたオブジェクトはセル内のJSON文字列としてシリアル化されます。address.street列が必要な場合は、最初に平坦化してください。
  4. 非常に大きな数値にCSVを使用する。 JSONは253−1 (約9兆) までの整数を安全に表現します。それを超える場合、文字列として送信してください。CSVが保持していても、Excelは長い数値IDをめちゃくちゃにします。
  5. エンコーディングを考えずにExcelで開く。 非ASCII文字はWindows上のExcelにはUTF-8 BOMが必要です; Google SheetsとモダンWeb版Excelには必要ありません。
  6. 数式プレフィックスをサニタイズせずにユーザー生成テキストをエクスポートする。 =+-、または@で始まるセルはExcelとSheetsの数式です。CSVインジェクションは、エクスポートされたファイルを開く管理者に対する実際の攻撃です。

よくある質問

私のJSONはネストされたオブジェクトを持っています。それらはどのように扱われますか?

ネストされた各オブジェクトまたは配列は、そのCSVセル内でJSON文字列としてシリアル化されます。したがって{user: {name: "Alice", role: "admin"}}{"name":"Alice","role":"admin"}を含むuserと呼ばれる1つの列になります。これはロスレスでラウンドトリップします。別々のuser.nameuser.role列が必要な場合は、Pandasのjson_normalizeまたは小さな平坦化スクリプトで前処理してください。

なぜ私の非英語文字はExcelで壊れて見えますか?

Windows上のExcelはCSVをデフォルトでWindows-1252で開きます。Byte Order MarkなしのUTF-8 CSVは文字化けのように見えます (é → é) 。修正: UTF-8 BOMでファイルを保存するか、ExcelのData → From Textインポートウィザードを使用してUTF-8を明示的に選択するか、BOMなしのUTF-8を正しく処理するGoogle Sheetsでファイルを開きます。

ツールはフィールド内のカンマを処理しますか?

はい。RFC 4180に従い、区切り文字、改行、または二重引用符を含むフィールドは自動的に二重引用符で囲まれます。埋め込まれた二重引用符は二重化することでエスケープされます。したがってSan Francisco, CA"San Francisco, CA"になり、She said "hi""She said ""hi"""になります。

私のJSONはサーバーに送信されますか?

いいえ。変換は完全にあなたのブラウザで実行されます。テキストエリアの内容は送信、ログ、またはどこにも保存されません。これは重要です。なぜなら、エクスポートされたレコードには、誰か他の人のインフラストラクチャを通過させたくないPII、顧客データ、従業員情報、トランザクション履歴がしばしば含まれているからです。

タブ区切り出力 (TSV) を取得できますか?

はい、区切り文字ドロップダウンで「Tab」を選択してください。データにカンマが含まれている場合 (住所、自由テキストフィールド、千位区切りの財務データ) 、TSVは正しい選択であり、他のすべてのセルを引用符で囲みたくない場合に最適です。多くのバイオインフォマティクスおよび科学データ形式はデフォルトでTSVです。

サイズ制限は何ですか?

あなたのブラウザが保持できる範囲。サーバー側の制限はありません。なぜならサーバーが関与していないからです。数十メガバイトのJSONは、現代のデバイスで1〜2秒で変換されます; 100メガバイトのペイロードは遅くなり始めます。非常に大きなデータセットの場合、バッチ処理するか、コマンドラインのストリーミングコンバータに移行してください。

関連ツール