日本語

開発者ツール · 構文コンバーター

CSV ~ JSON および JSON ~ CSV: ヘッダー、文字列値、およびフラット化

· 仕組み

json csv データ形式

点線の CSV 列に一方向に平坦化するネストされた JSON ツリー
オリジナル ToolAcre ベクトル イラスト

CSV はフラットで型がなく、独自の区切り文字があいまいですが、JSON はネストされ型付きです。この投稿では、コンバーターが行をオブジェクトにマッピングしたり、その逆にマッピングしたりする方法と、各方向で情報が失われる場所を示します。

すべての数値は引用符で囲まれています。CSV エクスポートは JSON に変換され、42 は「42」になり、郵便番号は先頭のゼロを一時的に保持しました。

ワークブックは CSV ~ JSON のサンプルを要求しますが、ToolAcre は CSV を読み取りません。エンジンはちょうど 9 つの有向ペアをアドバタイズしますが、CSV で始まるものはありません。ファイルを読み取るには、区切り文字、引用符、ヘッダーの有無、セルの種類について選択する必要があります。このパネルは4つの沈黙の推測をすることを拒否します。したがって、修正された記事には、出荷された JSON から CSV の方向が記載されています。

この一方向の決定は、インターフェイスとエラーの両方に表示されます。 CSV はソースではなくターゲットとして表示され、逆を試みると `UNSUPPORTED_CONVERSION` が返され、方言と型について質問するツールを使用するようアドバイスが表示されます。両方向を示唆するタイトルは、一般的なトピックが他の場所で共通している場合でも、製品を誤って説明することになります。

CSV はここでは読み取られません。ツールが実際に出荷する JSON-to-CSV パスから始めてください。

ルート JSON 配列が行を提供します。無地の物体が1列になります。配列を保持する唯一のキーを持つオブジェクトは、その配列をアンラップし、名前付きプロパティを使用したことを警告します。追加の兄弟キーを持つオブジェクトはラップ解除されません。ラップ解除すると、それらの兄弟が破棄または複製されるためです。

選択された各レコードは、列が収集される前にフラット化されます。レコードは配列内のスカラーになることもあります。これらは `value` 列を使用します。ドキュメント ルートのベア スカラーは、1 つの文字列または数値ではレコードとフィールドを含むテーブルを定義しないため、拒否されます。

JSON からのレコードの選択: 配列、単一オブジェクト、ワンキー配列ラッパー

JSON 型はセル テキストとしてのみ存続します。ブール値は `true` および `false` になり、数値は 10 進表現を使用し、null は空のセルになります。 CSV はその null と空の文字列を区別できないため、ライターは結果を同等と呼ぶのではなく、null をカウントし、あいまいさについて警告します。

ワイド整数は、この段階の前にすでに JSON 解析の対象になっているため、安全でない数値リテラルは精度が失われている可能性があります。識別子を引用符で囲むと、そのテキストが保持されます。数式のような文字列は、`=`、`+`、`-`、`@`、タブまたはキャリッジ リターンで始まる場合、デフォルトで追加のアポストロフィを受け取ります。実際の数値 `-5` は数値のままであり、接頭辞は付きません。

CSV 出力が JSON 型を保持できない理由

列は、フラット化されたキーを最初に見つかった順序で結合したものです。 1 つの行に `a` があり、もう 1 つの行に `b` がある場合、出力には両方の列が含まれ、欠落している各フィールドが空のセルで埋められます。警告は、間違ったヘッダーの下で値をシフトするのではなく、不規則な行を報告します。

オブジェクト キーの並べ替えは CSV には適用されません。著者のルールは、レコード全体での初出です。これにより、固定 JSON 入力に対して例が安定しますが、これはスキーマ コントラクトではありません。ダウンストリームのインポートで所定の順序が必要な場合は、ソース キーを意図的に配置するか、ヘッダーを後処理します。

ネストされたデータの平坦化 — address.city などのドット パス、インデックス付き列または結合文字列としての配列、および CSV が単純に形状を保持できない点

ネストされたオブジェクト キーはドットで結合されます: `address.city`。配列では同じ区切り文字と数値インデックスが使用されます: `tags.0`、`tags.1`。空のオブジェクトと配列は、消えるのではなく、独自のパスに 1 つの空のセルを保持します。これにより、ツリーが名前に投影されたことを認めながら、長方形が生成されます。

すでにドットが含まれているソース キーは、ネストされたパスではあいまいです。 ToolAcre は検出して警告しますが、スプレッドシートが理解できないエスケープ構文を発明することはありません。深い配列または長い配列は、2,000 列の上限を超える場合もあります。その場合、通常のスプレッドシート ソフトウェアでは使用できないテーブルが生成されず、変換が拒否されます。

うまくいった例: 双方向の顧客リスト — ネストされたフィールドを編集して CSV から JSON に、ネストをフラット化して JSON から CSV に戻す

`[ {"id":"0042","address":{"city":"Oslo"},"tags":["new","west"],"note":"=1+1"}, {"id":"0043","address":{"city":"Lima"},"tags":[],"note":null} ]` を使用します。ヘッダーには、id、address.city、tags.0、tags.1、およびメモが含まれます。 2 行目はタグ インデックスが存在しないため空白を受け取り、その null メモは空のテキストと区別できません。

最初のメモには接頭辞としてアポストロフィが付けられているため、スプレッドシートはそれをテキストとして扱います。レコードは CRLF で終わり、区切り文字、引用符、行末を含むフィールドは二重引用符で囲まれ、埋め込まれた引用符は二重引用符で囲まれます。セミコロンまたはタブを選択すると、区切り文字が変更されます。必要な消費者のために、オプションの UTF-8 BOM を追加できます。

動作例: ネストされた顧客配列が CSV に一度フラット化されました

CSV がルートに入っていないため、形式が不正か曖昧にエンコードされた CSV はこのルートの外にあります。 CSV クリーナーは、方言を選択または検出し、引用を修復する場所です。ここで、ソースは厳密な JSON であり、出力は文書化されたライターの規則に従います。

コンバーターは、100,000 行と 2,000 列でも出力を制限します。ヘッダーも行も持たないファイルはテーブル形状を持たないため、空の配列は拒否されます。これらの制限は強制されたコード パスであり、パフォーマンスを保証するものではありません。また、この記事ではスループットの数値を創作するものではありません。

要点: CSV はテーブル、JSON はツリー、および行をアップロードせずに構文コンバーター パネルがテーブル間を移動する方法

JSON は型付きツリーです。 CSV はテキスト テーブルです。 ToolAcre は行を選択し、パスを平坦化し、列を結合し、フィールドを引用符で囲み、危険なテキストを無効化しますが、null と空を保持したり、後でネストを再構築したりすることはできません。これらの損失は、フォーマット ノイズではなく構造的なものです。

スプレッドシート形式の出力が目的の成果物である場合は、この方向を使用します。 CSV ~ JSON が必要な場合は、区切り文字、ヘッダー、および型について尋ねるリーダーを選択してください。その逆を拒否することは、レビューされていない推測に基づいて構築された説得力のある JSON を返すよりも安全です。