AI資格ドリル
資格を選ぶ↓

用語比較

JSONとYAMLの違い|波括弧とコンマで書く形式と、インデントで書く形式(DS検定)

JSONとYAMLは、どちらもキーと値、値の並びを入れ子にしてデータを表す形式です。違いは、階層を何で表すかにあります。JSONは波括弧と角括弧、コンマで区切り、YAMLはインデントで階層を表します。

波括弧とコンマで書いてあればJSON、インデントとハイフンで書いてあればYAMLと見分けるのが、読み取りの出発点です。ただしYAMLにも括弧で書く流れ形式があるため、括弧だけでは断定せず、二重引用符の名前やコメントの有無もあわせて見ます。DS検定を運営するデータサイエンティスト協会のスキルチェックリストには、YAMLやJSONなどプロジェクトで指定される形式を理解し、構成・設定ファイルを適切に記述・管理できることが★1つ星の項目として挙がっています。

このページは、設定ファイルを見て「どこまでが同じ階層か」を読めずに迷う人や、JSONにコメントを書こうとして詰まる人を対象にしています。データベースのCSVとの違いや、個々の記法の用語解説は、関連ページで扱います。

この記事の根拠と出典

各セクションの見出しの下に、公式資料で確認した内容か編集部の整理かをラベルで示しています。 試験日・料金・申込条件・試験方式は変わることがあるため、申込前に公式サイトで確認してください。DS検定の一次情報確認日: 2026-10-02。

結論

JSON

RFC 8259で定められた、軽量で言語に依存しないテキストのデータ交換形式。オブジェクトは波括弧、配列は角括弧で囲み、要素はコンマで区切る。文字列は二重引用符で囲む。

YAML

YAML 1.2.2仕様では、ブロックの階層をインデントで表す。マッピングはコロン、シーケンスは各要素をハイフンと空白で示す。#で始まるコメントを書ける。

違いを表で確認

比較軸JSONYAML
階層の表し方波括弧{}と角括弧[]の入れ子行頭の空白(インデント)の深さ
キーと値の書き方"name": "値"(名前は二重引用符で囲み、コロンで値と結ぶ)name: 値(コロンで対応させる)
並びの書き方[1, 2, 3](コンマ区切り)各行を「- 値」(ハイフンと空白)で始める
コメントRFC 8259の文法にコメントを書く規則はない#から行末までをコメントとして書ける
空白・インデントの意味構造文字の前後の空白に意味はないインデントが階層を決める。タブは使えない
試験で探す語波括弧、角括弧、二重引用符、コンマインデント、ハイフン、コロン、#

どこで迷っているかを切り分ける

01

設定ファイルの行が、どの項目の下にあるのか分からない人

YAMLでは、子の項目は親より深くインデントし、同じ親を持つ兄弟の項目は同じ深さにそろえます。行頭の空白の数を左から順に見て、同じ深さの行が兄弟、1段深い行が子と読みます。

02

JSONにメモを書き込みたい人

JSONの文法にはコメントを書く規則がありません。メモを残したいときは、設定がYAMLで書ける形式かどうかを先に確かめます。YAMLなら#から行末までがコメントになります。

03

YAMLのインデントをタブで入れてしまう人

YAML 1.2.2仕様は、システムごとにタブの扱いが異なるため、移植性を保つ目的でタブをインデントに使ってはならないと定めています。空白文字でそろえます。

具体例で使い分ける

例 1

同じデータをJSONで書いた場合とYAMLで書いた場合

名前と、2つの値の並びを持つ設定を、2つの形式で書き比べます。

  • JSONでは {"name": "job", "values": [1, 2]} と書き、全体を波括弧、並びを角括弧で囲み、要素の間をコンマで区切ります。
  • YAMLでは、1行目に name: job、2行目に values: と書き、続く2行を 「 - 1」「 - 2」 のように、親より深くインデントしたハイフン始まりの行にします。
  • どちらも「nameの値がjob、valuesが1と2の並び」という同じ構造を表します。

結論: 書き方は違っても、キーと値、値の並びという構造は同じです。括弧とコンマならJSON、インデントとハイフンならYAMLです。

例 2

コロンの後ろに子の項目が3行インデントされている設定を読む場合

YAMLの階層を読み取ります。

  • 親の項目は、行末のコロンの後ろに値が続かず、次の行以降に子が並びます。
  • 子の3行が同じ深さにそろっていれば、同じ親を持つ兄弟のマッピングです。
  • さらに深い行があれば、それはその直前の兄弟の子として読みます。

結論: インデントの深さを比べるだけで、親子と兄弟の関係を読み取れます。

問題文から答えを選ぶ手順

  1. 1

    括弧とコンマを探す

    波括弧、角括弧、コンマ区切り、二重引用符で囲んだ名前があれば、JSONの書き方です。YAMLにも括弧で書く形式があるため、括弧だけで断定せず、コメントの有無もあわせて見ます。

  2. 2

    インデントとハイフンを探す

    行頭の空白で階層が決まり、並びが「- 値」の行で書かれていれば、YAMLと判断します。

  3. 3

    コメントの有無を確かめる

    #から始まる行があれば、YAMLです。JSONには、コメントを書く規則がありません。

  4. 4

    階層を読む

    JSONは括弧の入れ子、YAMLはインデントの深さで、親子と兄弟の関係を読み取ります。

試験での見分け方

  • 1JSONはオブジェクトを波括弧、配列を角括弧で囲み、要素の間をコンマで区切る。名前は文字列で、二重引用符で囲む。
  • 2YAMLはインデントで階層を表し、マッピングはコロン、シーケンスはハイフンと空白で示す。
  • 3YAMLのコメントは#で示す。コメントは表現上の詳細で、データの内容には影響しない。
  • 4YAML 1.2は、JSONの厳密な上位集合になることを主な目的としている。
  • 5YAMLのインデントにタブは使えない。空白文字を使う。
  • 6JSONの構造文字の前後の空白は、意味を持たない。

誤答しやすい選択肢

YAMLでもJSONと同じく括弧が必須だと考える

修正: YAMLのブロック形式は、インデント、コロン、ハイフンで階層を表すので、波括弧や角括弧は必須ではありません。

JSONのインデントが階層を決めると考える

修正: JSONの構造文字の前後の空白は意味を持ちません。階層を決めるのは波括弧と角括弧の入れ子です。

YAMLのインデントにタブを使う

修正: YAML 1.2.2仕様は、移植性のためタブをインデントに使ってはならないと定めています。空白文字で深さをそろえます。

JSONの配列の要素を、ハイフンで並べる

修正: ハイフンと空白で要素を示すのはYAMLのシーケンスです。JSONの配列は、角括弧の中にコンマで区切って書きます。

確認問題

Q1{"a": 1, "b": [2, 3]} はJSONとYAMLのどちらの書き方ですか?

答え: JSONの書き方(YAMLとしても読める)

波括弧と角括弧、コンマ区切り、二重引用符で囲んだ名前はJSONの特徴です。YAML 1.2はJSONの上位集合になることを目的に作られているため、同じ文字列をYAMLとして読むこともできます。

Q2設定ファイルで、親より深くインデントされ、行頭がハイフンと空白で始まる行が並んでいます。これは何を表しますか?

答え: YAMLのシーケンス(値の並び)

YAMLでは、シーケンスは各要素をハイフンと空白で示します。

Q3メモ用のコメントを書けるのは、JSONとYAMLのどちらですか?

答え: YAML(#から行末まで)

YAMLは#でコメントを示します。JSONの文法にはコメントを書く規則がありません。

到達チェック

  • JSONとYAMLが階層を何で表すか言える
  • JSONのオブジェクトと配列を囲む記号を言える
  • YAMLのマッピングとシーケンスの書き方を言える
  • YAMLのインデントにタブを使えない理由を説明できる
  • コメントを書けるのがどちらか答えられる

同じ資格で次に知りたいこと

よくある質問

QJSONとYAMLの一番大きな違いは何ですか?

A

階層の表し方です。JSONは波括弧と角括弧の入れ子で表し、YAMLはインデントで表します。

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

A

JSONを定めたRFC 8259の文法には、コメントを書く規則がありません。YAMLでは#で始めるコメントを書けます。

QYAMLのインデントにタブは使えますか?

A

使えません。YAML 1.2.2仕様は、移植性を保つため、タブをインデントに使ってはならないと定めています。

QYAMLはJSONを含みますか?

A

YAML 1.2の主な目的は、JSONの厳密な上位集合になることでした。ただし試験では、まず書き方の違いで見分けます。

次に見る比較

執筆: ミナト編集部(運営者情報を見る)