JSONとYAML:2つのデータ形式

モダンな開発において、データの保存や転送には主にJSONとYAMLが使われます。

JSONとYAMLの変換とその使い分け

JSON (JavaScript Object Notation)

  • 特徴: 軽量でパースが速い。JavaScriptと親和性が高い。
  • 用途: Web API(REST), フロントエンドのリクエスト/レスポンス。
  • 弱点: コメントが書けない。末尾のカンマに厳しい。

YAML (YAML Ain’t Markup Language)

  • 特徴: 人間が読みやすい(ヒューマンラダブル)。
  • 用途: 設定ファイル(Docker, Kubernetes, GitHub Actions), CI/CD。
  • 弱点: インデント(空白)に厳格。パースがJSONに比べて複雑。

変換が必要になるケース

  • 設定ファイルの編集: APIで取得したJSON設定を、読みやすいYAML形式に変換してローカルファイルに保存したい場合。
  • データ投入: YAMLで管理している設定を、プログラムで扱うためにJSON形式に変換してAPI経由で送信したい場合。
  • デバッグ: 見づらい1行のJSONをYAMLに変換して、構造を素早く把握したい場合。

実例:API設定をYAMLでレビューする

APIから次のようなJSON設定を受け取ったとします。

{
  "retries": 3,
  "timeoutMs": 30000,
  "features": {
    "csvExport": true,
    "betaDashboard": false
  }
}

レビュー時にYAMLへ変換すると、設定の階層を読みやすくできます。

retries: 3
timeoutMs: 30000
features:
  csvExport: true
  betaDashboard: false

この形なら、タイムアウトがミリ秒なのか、機能フラグがどの階層にあるのかを確認しやすくなります。JSON、CSV、YAMLを行き来する作業では、形式そのものより「誰が何を確認するか」に合わせて見せ方を変えるのが大切です。

JSONとYAMLの比較早見表

観点JSONYAML
読みやすさ記号が多めインデント中心で読みやすい
コメント不可# で記述可能
末尾カンマ不可(エラー)そもそもカンマ不要
複数行文字列\n でエスケープ`
主な用途Web API・データ転送設定ファイル・CI/CD
パースの厳密さ構文が厳格で曖昧さが少ないインデント依存で崩れやすい

JSONはYAMLのサブセットに近い関係にあり、有効なJSONはおおむね有効なYAMLとしても解釈できます。だからこそ相互変換がスムーズに行えます。

YAML特有の落とし穴

YAMLは「人間に優しい」反面、暗黙の型変換でハマりやすい形式です。設定ファイルを書くときは次の点に注意します。

  • 真偽値に化ける文字列: yes / no / on / off は、引用符で囲まないと真偽値として解釈されることがあります(いわゆる “Norway problem”:国コード NOfalse になる)。文字列として扱いたいときは "no" のように明示します。
  • 先頭ゼロ・バージョン番号: 08 が8進数扱いでエラーになったり、1.20 が数値の 1.2 に丸められたりします。バージョンや郵便番号は "1.20" とクォートします。
  • インデントにタブは使えない: YAMLは半角スペースのみ。タブが混ざるとパースエラーになります。

迷ったら一度JSONへ変換すると、文字列なのか数値なのかが明確になり、こうした暗黙変換に気づけます。

DevToolKitsでの相互変換

JSON⇔YAML変換ツール を使用すると、どちらの形式からも双方向にワンクリックで変換できます。
JSONを貼り付ければYAMLに、YAMLを貼り付ければJSONに出力されます。

💡 注意点: 変換時にコメント(YAMLのみ)が消失する場合があるため、純粋なデータ構造の変換として利用するのが最適です。

CSVで受け取った一覧データをJSONへ変換し、設定やAPIレスポンスはYAMLで確認する、というように使い分けると、データ変換の記事群を実務の流れとしてつなげられます。

よくある質問

JSONとYAMLはどちらを使うべきですか?

機械同士の通信(Web API)はパースが速く曖昧さの少ないJSON、人間が編集する設定ファイル(Docker、Kubernetes、CI/CD)はコメントが書けて読みやすいYAMLが向いています。両者は相互変換できるので、用途に応じて使い分けるのが基本です。

YAML変換でコメントが消えてしまいます

JSONにはコメントの概念がないため、YAML→JSON→YAMLと往復するとコメントは失われます。コメントを残したい設定ファイルは、変換後に手で書き戻すか、純粋なデータ構造の変換だけに使うのが安全です。

YAMLのインデントでエラーになります

YAMLは空白インデントに厳格で、タブ文字は使えません。階層がずれているとパースエラーや意図しない構造になります。一度JSONに変換して構造を確認し、再度YAMLに戻すと、インデントの崩れを見つけやすくなります。

no1.20 が意図しない値に変わります

YAMLは暗黙の型変換を行うため、yes / no / on / off は真偽値に、1.20 は数値 1.2 に解釈されることがあります。文字列として扱いたい値は "no""1.20" のように引用符で囲んでください。JSONに変換すると、実際にどの型として解釈されたかを確認できます。

YAMLで複数行の文字列を書くには?

改行をそのまま保持したい場合は |(リテラルブロック)、長い文を適度に折り返して1行として扱いたい場合は >(折りたたみブロック)を使います。JSONへ変換すると \n を含む1つの文字列になるため、改行が正しく保持されているかを確認できます。