YAML と JSON:どちらを、なぜ選ぶか

YAML と JSON の比較

YAML と JSON:違い、落とし穴、.yaml と .yml | We.Inc

YAML と JSON を並べて比較します。構文、コメント、型、複数行テキスト、yes/no の落とし穴。裸の値がどう解釈されるかを試し、.yaml と .yml の問題にも決着をつけましょう。

JSONはプログラム向けの厳格なデータ形式で、波かっこ、角かっこ、二重引用符で囲んだ文字列を使い、コメントは書けません。YAMLは同じデータをインデントで表現し、コメントや複数行テキストを書けます。バージョン 1.2 はJSONのスーパーセットとして設計されました。APIや機械の出力にはJSONを、人が手で編集するファイルにはYAMLを選びましょう。

YAML と JSON の機能ごとの比較

どちらの形式も、マップ、リスト、文字列、数値、真偽値、null という同じものを記述します。本当の違いは、誰がファイルを読むのか、そしてパーサーがどれだけ寛容かです。下の値チェッカーで引用符なしの値にどんな型が付くかを試し、その後で並べた例と、両者を行き来する人がつまずく落とし穴を読んでください。

よくある質問

JSONファイルはすべて有効なYAMLですか?

YAML 1.2 はJSONの厳密なスーパーセットになるよう書かれているので、実際にはJSONのドキュメントは YAML 1.2 のパーサーで読み込めます。ただし例外もあり、たとえば重複キーはJSONのパーサーでは許容されることが多いものの、YAMLでは禁止されています。

.yaml と .yml のどちらを使うべきですか?

.yaml を使いましょう。application/yaml メディアタイプを登録した RFC 9512 は .yaml を推奨の拡張子とし、.yml もまだ使われていると記しています。GitHub Actions などのツールではどちらも動くので、1つのプロジェクト内で統一することが大切です。

YAMLの値が true や false になったのはなぜですか?

YAML 1.1 は yes、no、on、off、y、n などの語を真偽値として扱っていました。YAML 1.2 のコアスキーマが受け付けるのは3通りの大文字小文字表記の true と false だけですが、古いパーサーもまだ広く使われています。値を引用符で囲めば迷いがなくなります。

JSONにコメントは書けますか?

いいえ。RFC 8259 にはJSONに含められるトークンが列挙されており、コメントはその中にありません。コメント付きの緩いJSONを受け付けるツールもありますが、厳格なパーサーはそのファイルを拒否します。

解析が速いのはどちらですか?

JSONの文法のほうがはるかに小さく、ブラウザーにはネイティブのパーサーが組み込まれているので、ネットワーク越しに送るデータには通常こちらのほうが速くて安全です。YAMLのパーサーは、インデントから暗黙の型付けまで、はるかに多くの規則を適用しなければなりません。

JSONのほうが適している場合

YAMLのほうが適している場合

1つのレコードを両方の形式で書く

同じサイト設定を両方の形式で書いたものです。YAMLは引用符と波かっこを省いてコメントを加え、JSONはすべての文字列と入れ子の階層を明示します。

2スペースのインデント、コメント、リスト、そしてテキストのまま保つために引用符で囲んだバージョン文字列。

コメントは書けず、すべてのキーと文字列に二重引用符が付きます。

引用符を忘れると型が変わる値

引用符なしのYAMLの値に付く型と、安全な書き方

この裸の値はどう解釈される?

YAMLファイルでコロンの後に書くのと同じように、引用符なしで値を入力してください。チェッカーは YAML 1.2 コアスキーマの規則、YAML 1.1 の真偽値リスト、JSONの文法を適用します。

引用符なしの値

YAML 1.2 コアスキーマ

YAML 1.1 のパーサー

JSON(そのままの形)

JSONでの同じ値

真偽値 {v}(YAML 1.1 はこの語を真偽値として読みます)

この値には yes/no 型の真偽値の落とし穴はありません

有効なJSONの値

引用符で囲まない限り有効なJSONではありません

JSONにはこの数値を書く方法がありません

試してみる

無料で始める · クレジットカード不要

関連: ガイド|Webマーケティングと集客を学ぶ

製品

ご利用いただける方

機能

リソース

会社情報

サイトマップを見る