JSON、YAML、CSV はすべて構造化データを保存しますが、互換性はありません。ネストされたアドレス、入力されたブール値、構成内のコメント、またはチームメイトが Excel で開くことができるスプレッドシートが必要になるまでは、同じ人物のレコードが 3 つすべてで整然としているように見えます。間違った形式を選択すると、型が失われ、ツリーが扱いにくい列に平坦化されたり、YAML で国コード NO が false に変わるなどのパーサーの予期せぬ事態に遭遇したりします。このガイドでは、JSON、YAML、CSV を並べて、それぞれがいつ勝つかを示し、ToolsMinify の無料コンバーターをリンクします。
クイック回答
API とマシン交換には JSON を使用します。厳密で、十分に型指定され、汎用的です。コメントやアンカーが必要な場合は、人間が編集した構成に YAML を使用し、ドキュメントを小さく保ちます。スプレッドシートで開くフラット テーブルには CSV を使用します。 JSON to CSV Converter と YAML to JSON Converter を使用してそれらの間で変換します。 JSON Minifier & Formatter を使用してペイロードを整理します。
3 つのフォーマットすべてで同じレコード
ID、名前、アクティブなフラグ、タグという 1 つのオブジェクトから始めます。各形式でのレコードの外観を次に示します。これにより、構文を一目で比較できます。
JSON
- {"id": 42、"name": "Ada"、"active": true、"tags": ["admin"、"beta"]}
- 引用符で囲まれたキー、フィールド間のカンマ、配列の大括弧、リテラルとしての true/false/null。
- コメントはありません。標準 JSON では末尾のカンマは無効です。
YAML
- ID:42
- 名前:エイダ
- アクティブ: true
- タグ:
- - 管理者
- - ベータ版
- インデントは構造を定義します。多くの場合、引用符はオプションです。コメントは # で始まります。
CSV
- ID、名前、アクティブ、タグ
- 42、エイダ、true、「管理者;ベータ」
- ヘッダー行が 1 行、次にレコードごとに 1 行になります。ネストされた配列は、フラット化された文字列または追加の列になります。テキスト以外のネイティブ型はありません。
すでにオブジェクトの JSON 配列を調べていますか?それを JSON to CSV Converter に貼り付けて、スプレッドシートに適したテーブルを作成します。設定を別の方向に移動しますか? JSON のみを使用する API クライアントの前に、YAML to JSON Converter を使用します。
JSON: API と交換のデフォルト
JSON (JavaScript Object Notation) は、あらゆる主要言語で解析できる JavaScript オブジェクト構文のサブセットです。オブジェクト、配列、文字列、数値、ブール値、および null はファーストクラスです。ネストは無制限であるため、ユーザー オブジェクト内のアドレス オブジェクトは自然です。そのため、REST および GraphQL 応答、Webhook 本体、および多くの構成ストアが JSON を出荷します。
- 最適な用途: API リクエストとレスポンスの本文、ブラウザーとモバイル クライアント、メッセージ キュー、多くの言語を往復する必要があるもの。
- 長所: 厳密な文法、予測可能な型、優れたツール、簡単に縮小でき、きれいに印刷できます。
- 制限: コメントなし、エスケープなしの複数行文字列なし、アンカーまたはマージなし。人間が大規模な JSON を手作業で編集すると、ノイズの多い差分が生成されます。
ペイロードが 1 つの圧縮された行として到着したら、JSON Minifier & Formatter を開いて整形し、中括弧を検証してから、出荷する前に再度縮小します。
YAML: 設定担当者が実際に編集する
YAML (YAML Ain't Markup Language) は、まず人間のために設計されています。ほとんどの中括弧はインデントに置き換えられます。 # を使用してコメントを残すことができ、 | を使用して複数行のブロックを記述することができます。または > を使用し、アンカー (&name) とエイリアス (*name) を含むブロックを再利用します。この組み合わせにより、YAML が Kubernetes マニフェスト、Docker Compose、GitHub Actions、および多くのアプリ構成ファイルのデフォルトになりました。
コメントとアンカー
コメントは JSON にはない機能です。 # で始まる行は、ランタイム データを変更せずにタイムアウトが 30 秒になる理由を示しています。アンカーはさらに進化します。&logging を使用して共有ログ ブロックを一度定義し、それを *logging を使用して複数のサービスに取り込み、必要に応じて <<: でキーをオーバーレイします。慎重に使用すると、アンカーが重複をカットします。不用意に使用すると、ファイルが読みにくくなり、Git にマージすると驚くほどになります。
- 最適な用途: デプロイメントおよび CI 構成、人間が編集する機能フラグ、ワイヤー サイズより読みやすさが優れている小さなドキュメント。
- 長所: コメント、アンカー/エイリアス、複数行の文字列、句読点ノイズが少ない。
- 制限: インデントのバグ、暗黙的なタイピングの驚き、および安全でないローダーを使用して信頼できない YAML を解析した場合の攻撃対象領域の拡大。
CSV: スプレッドシート用のフラット テーブル
CSV (カンマ区切り値) は、列と行のグリッドです。スプレッドシート、BI ツール、データ パイプラインはそれを理解します。ネストされたオブジェクト、配列型、通常はブール型はありません。インポーターがキャストするまではすべてテキストです。データがすでにユーザーまたは注文のテーブルである場合には問題ありません。発生源が木である場合には分解します。
CSV で型とネストが失われる理由
- タイプ: "42"、42、および true は、スキーマを定義しない限り、すべて文字列として到着します。 ID と電話番号の先頭のゼロは Excel によって削除されます。
- ネスト: street と city を含む住所は、address.street 列、1 つのセル内の JSON BLOB、または重複した親行になります。
- 配列: タグは多くの場合、区切り文字 (admin;beta) を持つ単一のセルになるため、後で分割する必要があります。
- Null と空: 空のセルは、Null、空の文字列、または列が欠落していることを意味する場合があり、規則が異なります。
ソースがネストされた JSON の場合は、ファイルをスプレッドシートに渡す前に、JSON to CSV Converter を使用して意図的に変換し、配列とネストされたキーをどのように平坦化するかを決定します。
各形式が正しい選択である場合
API とマシン間
JSON を優先します。クライアントは application/json を期待しており、ツールはどこにでもあり、型システムはほとんどの契約に十分です。 HTTP 本文として YAML を使用することはまれであり、通常は間違いです。 API 応答としての CSV は、Excel またはデータ ウェアハウスにフィードする一括エクスポート エンドポイントでのみ意味を持ちます。
設定ファイル
人間がファイルを編集してコメントが必要な場合は、YAML (または TOML などの型付き形式) を優先します。構成が生成され、スキーマによって検証され、または主にツールによって編集される場合は、JSON を優先します。 YAML ドキュメントは小さくしてレビューしてください。深いアンカーやカスタム タグはあまり古くなりません。
スプレッドシートと分析
コンシューマーが Excel、Google Sheets、または SQL COPY の場合は、CSV (または実際のスプレッドシート形式) を優先します。まずモデルをフラット化します。記録システム用に JSON を保持し、CSV をビューとしてエクスポートします。
経験則
交換には JSON、人間による設定には YAML、表形式のエクスポートには CSV。境界で変換する - 1 つの形式に 3 つのジョブすべてを強制的に実行させないでください。
古典的なトラップ
YAML のノルウェー問題
YAML 1.1 では、いくつかの引用符で囲まれていない文字列はブール値 (yes、no、on、off、true、false (および一部のロケールのバリアント)) として解析されます。ノルウェーの国コード NO はブール値 false になります。 1.10 などのバージョン文字列は浮動小数点数になることがあります。実際には文字列である場合でも、ブール値、数値、または日付のように見える値を引用符で囲みます: country: "NO"。可能であれば YAML 1.2 パーサーを優先し、それでも疑わしいスカラーを引用します。
引用符で囲まれたフィールド内の CSV カンマ
カンマ、引用符、または改行を含むフィールドは二重引用符で囲む必要があります。フィールド内の引用符は、「Ada ""Lovelace""」のように 2 倍にすることでエスケープされます。単純にカンマで分割すると、これらの行が分割されます。 Always use a real CSV parser or exporter - including when you round-trip through the JSON to CSV Converter.ロケール設定も重要です。一部の地域ではセミコロン区切り文字が使用されますが、Excel では依然としてカンマが必要であり、その逆も同様です。
その他の注意点
- JSON: JavaScript オブジェクト リテラルの末尾のカンマとコメントは厳密なパーサーで失敗します。
- YAML: タブとスペース、タグを実行する安全でないローダー、マージミスを隠す巨大なドキュメント。
- CSV: エンコード、区切り文字、または行末に関する単一の標準はありません。必ず UTF-8 と区切り文字を文書化してください。
並べて比較
- ネスト - JSON および YAML: 自然ツリー。 CSV: 構造を平坦化するか失う。
- タイプ - JSON: 文字列、数値、ブール値、null、配列、オブジェクト。 YAML: より豊富なスカラー (さらに驚き)。 CSV: キャストするまでのテキスト。
- コメント - JSON: なし。 YAML: コメント数。 CSV: 標準のコメントはありません。
- 人間による編集 - 通常は YAML が優先されます。 JSON は小さなファイルには問題ありません。スプレッドシート内では CSV が優れています。
- ワイヤー/API - JSON がデフォルトです。 YAML と CSV はエッジケースです。
- ツール - JSON から CSV および YAML から JSON で変換します。 JSON Minifier & Formatter を使用して JSON をフォーマットします。
よくある質問
YAML は JSON よりも優れていますか?
コメントを含む人間が編集した設定の場合、多くの場合は「はい」です。 API と交換については、JSON の方が優れています。より厳密で、予測可能であり、広くサポートされています。多くのチームは YAML を作成し、実行時にコンパイルまたは JSON に変換します。
CSV はネストされた JSON を表現できますか?
平らにするだけで。ネストされたオブジェクトは、点線の列またはセル内の JSON 文字列になります。配列は区切り文字で区切られたリストまたは繰り返し行になります。 CSV は、ツリー全体を保存する必要がある場合ではなく、コンシューマーがテーブルを必要とする場合に使用します。
構成を JSON または YAML で保存する必要がありますか?
毎週編集してコメントを残す場合は、YAML (または TOML)。スキーマ検証ツールまたは codegen がファイルを所有している場合は、JSON.同じ真実の情報源に対して両方を混合することは避けてください。
YAML におけるノルウェー問題とは何ですか?
引用符で囲まれていない NO (および同様のトークン) は、YAML 1.1 ではブール値 false として解析できます。国コードやその他の文字列スカラーを引用符で囲むか、それらを文字列として扱う YAML 1.2 パーサーを使用します。
これらの形式間で変換するにはどうすればよいですか?
構成から API 形状への変換には YAML to JSON Converter を使用し、表形式のエクスポートには JSON to CSV Converter を使用します。 JSON Minifier & Formatter を使用して JSON を美しくまたは縮小します。 3 つはすべてブラウザーで実行されます。
ToolsMinify で JSON、YAML、CSV を変換する
以下のすべてのツールはブラウザ内で完全に実行されます - 無料、サインアップなし、何もアップロードされません。
- JSON から CSV へのコンバーター - オブジェクトの JSON 配列をダウンロード可能な CSV テーブルに変換します。
- YAML から JSON へのコンバーター - YAML 構成を API とバリデーター用の JSON に解析します。
- JSON ミニファイアーとフォーマッタ - JSON をきれいに出力または縮小し、構文エラーを早期に検出します。
- すべてのコンバータツール - 完全なカテゴリインデックス。
無料でお試しください
サンプルを JSON to CSV Converter または YAML to JSON Converter に貼り付け、出力を比較します。すべてがデバイス上に残ります。