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行あたり1レコード、改行で区切ります。RFCはCRLFを指定しています; 現代のほとんどのパーサーはLFも受け入れます。
- レコード内のフィールドは単一の区切り文字で区切られます。正典的な形ではカンマですが、セミコロン、タブ、またはパイプは地域的および従来のバリアントで一般的です。
- すべてのレコードは同じ数のフィールドを持つべきです。欠損値は空のセルになります; 余分な区切り文字はエラーです。
- ヘッダー行はオプションです; 存在する場合、それは最初の行です。
- カンマ、改行、または二重引用符を含むフィールドは必ず二重引用符で囲まれなければなりません。
- 引用符付きフィールド内の埋め込まれた二重引用符は二重化することでエスケープされます:
"She said ""hello"""。 - CSVに登録されたMIMEタイプは
text/csvです。
なぜ1つではなく4つの区切り文字なのか
デフォルトはカンマですが、各区切り文字は特定の問題を解決します:
- カンマ (
,) 、アメリカ、イギリス、その他の英語圏のロケールでの標準。OSの地域設定が英語の場合、ExcelはカンマでCSVを読みます。より広いツーリングエコシステムにおけるapplication/csvのデフォルト。 - セミコロン (
;) 、ヨーロッパ大陸、ラテンアメリカ、その他カンマが小数点の地域における事実上のデフォルト。ExcelはOSのリスト区切り文字を使用するため、フランス語またはドイツ語ロケールのExcelはセミコロン区切りのCSVを生成します。 - タブ、TSV (タブ区切り値) は科学データ、バイオインフォマティクス、データ自体がカンマを含む文脈 (自由テキストフィールド、住所) で一般的です。
- パイプ (
|) 、データがカンマ、セミコロン、そしてタブを含む可能性のある一部の従来のエンタープライズシステムで好まれます。最初の選択肢として正しいことはまれですが、他に何も機能しない場合に役立ちます。
ネストされたJSONの平坦化: 3つの戦略
JSONは階層的です; CSVはフラットです。両者の間に汎用的なロスレスマッピングはありません。入力がネストされたオブジェクトまたは配列を含む場合、すべてのコンバータは選択しなければなりません:
- JSON文字列としてインライン化。 ネストされた部分はJSONに再シリアル化され、単一のCSVセルに入れられます。このツールのデフォルトのアプローチ。ロスレス; ラウンドトリップに安全; 構造が必要な場合、消費者は内部のJSONをパースする必要があります。
- ドット付きキー平坦化。
{address: {street, city}}はaddress.streetとaddress.cityの列になります。Pandasのjson_normalizeはこの方法で動作します。アナリストにとってよりクリーンですが、深くネストされたデータでは列数が爆発します。 - 行の爆発。 配列は複数の行になり、親フィールドが繰り返されます。
{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は時に害をなす方法で役立ちます:
- 先頭ゼロの除去。
01234のような郵便番号の列は数値1234として開かれます。回避策: CSV内でアポストロフィでプレフィックス ('01234) するか、Excelのインポートウィザードを使用し、列タイプをテキストに明示的に設定します。 - 自動日付変換。 日付のように見える文字列 (
3/4/5、Mar-23) は静かに変換されます。同じ回避策。 - 科学的記法。 長い数値ID (クレジットカード番号、大きな整数) は
1.23E+15に変換され、精度を失います。JSONは253−1までの数値を正確に保存できます; それより大きいものについては、値をJSON内で文字列として送信してください。 - UTF-8 BOMの不一致。 Windows上のExcelはWindows-1252をデフォルトとします; BOMなしでUTF-8 CSVを開くと、非ASCII文字 (é、ü、å) が文字化けになります。ファイルの先頭にUTF-8 BOM (
) を追加するとこれが修正されます。Google SheetsはBOMなしのUTF-8を正しく処理するため、BOMはプラットフォーム固有です。
CSVインジェクション、知っておく価値のあるセキュリティ注意
CSVがExcelまたはGoogle Sheetsで開かれる場合、=、+、-、または@で始まるセルは数式として解釈されます。OWASPのCSV Injectionページはこの攻撃クラスを文書化しています。ユーザー提出フィールド内の=cmd|' /c calc'!A0のような悪意のある文字列は、管理者がエクスポートを開いたときにコマンドを実行する可能性があります。防御的な実践: それら4つの文字のいずれかで始まるセルにシングルクオートでプレフィックスするか、引用符と先頭のアポストロフィで囲みます。ユーザー生成コンテンツをエクスポートする場合、知っておくことが重要です。
コンバータが扱う一般的なエッジケース
- 区切り文字を含むフィールド、自動的に引用されます。カンマCSV内の
San Francisco, CAは"San Francisco, CA"になります。 - リテラル改行を含むフィールド、引用されます; 複数行の内容はRFC 4180に従って引用符内で合法です。
- 二重引用符を含むフィールド、引用され、内部の引用符が二重化されます:
She said "yes"は"She said ""yes"""になります。 - 空の配列とオブジェクト、それぞれそのセル内で
[]と{}としてシリアル化されます。 - 異なるキーを持つレコード、すべてのキーの和集合がヘッダー行を形成します; 欠損フィールドは空のセルです。
- 単一オブジェクト vs 配列、単一のJSONオブジェクトは単一行のCSVになります。
このツールをいつ使うか
- API応答のエクスポート 並べ替えとフィルタリングができるスプレッドシートが欲しいステークホルダー向け。
- JSONデータの一括インポート
LOAD DATA INFILE(MySQL) またはCOPY(PostgreSQL) を介してSQLデータベースへ。両方ともCSV形式の入力を期待します。 - クイックデータ分析 Excel、Google Sheets、Pandas、R、Tableau、またはPower BIで。
- メーリングリストの生成 連絡先のJSON API応答から。
- データの移行 APIを共有していないが両方ともCSVを話すシステム間。
- JSONファイルを目で見直す 直接読むには繰り返しが多すぎる場合、スプレッドシートビューの方が簡単なことがよくあります。
プライバシー
CSVエクスポートはほぼ常にPII、顧客記録、従業員データ、トランザクションログ、連絡先リストを含みます。サーバー側の変換は、すべてのレコードを第三者のインフラストラクチャを通して送信し、そこで転送ログ、サーバーログ、そして可能性としてはキャッシュされた応答に存在します。ブラウザベースの変換はデータをあなたのマシンに保持します。ここでの平坦化と引用のステップ全体は、あなたのブラウザ内のJavaScriptで行われます; 何もアップロードされません。
よくある間違い
- 聴衆に間違った区切り文字。 フランスのExcelユーザーにカンマCSVを送信すると、単一列のファイルが生成されます。区切り文字を受信者のロケールに合わせてください。
- 配列の代わりに単一オブジェクトを貼り付ける。 単一のオブジェクトはキーから列ヘッダーを持つ1行のCSVに変換されます。複数のレコードについては、配列で囲んでください。
- Pandasスタイルの平坦化を期待する。 このツールのネストされたオブジェクトはセル内のJSON文字列としてシリアル化されます。
address.street列が必要な場合は、最初に平坦化してください。 - 非常に大きな数値にCSVを使用する。 JSONは253−1 (約9兆) までの整数を安全に表現します。それを超える場合、文字列として送信してください。CSVが保持していても、Excelは長い数値IDをめちゃくちゃにします。
- エンコーディングを考えずにExcelで開く。 非ASCII文字はWindows上のExcelにはUTF-8 BOMが必要です; Google SheetsとモダンWeb版Excelには必要ありません。
- 数式プレフィックスをサニタイズせずにユーザー生成テキストをエクスポートする。
=、+、-、または@で始まるセルはExcelとSheetsの数式です。CSVインジェクションは、エクスポートされたファイルを開く管理者に対する実際の攻撃です。
よくある質問
私のJSONはネストされたオブジェクトを持っています。それらはどのように扱われますか?
ネストされた各オブジェクトまたは配列は、そのCSVセル内でJSON文字列としてシリアル化されます。したがって{user: {name: "Alice", role: "admin"}}は{"name":"Alice","role":"admin"}を含むuserと呼ばれる1つの列になります。これはロスレスでラウンドトリップします。別々のuser.nameとuser.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メガバイトのペイロードは遅くなり始めます。非常に大きなデータセットの場合、バッチ処理するか、コマンドラインのストリーミングコンバータに移行してください。