alltools.one
Data
2025-06-21
7 min
alltools.one Team
JSONYAMLConversionConfigurationDevOps

JSONからYAMLへの変換:完全移行ガイド

JSONとYAMLは同じデータ構造を異なる構文で表現します。ほとんどの場合、フォーマット間の変換は簡単ですが、型、複数行文字列、コメントに関するエッジケースには注意が必要です。このガイドでは、フォーマット間の完全なマッピングを解説します。

構文のマッピング

オブジェクト / マッピング

JSON:

{
  "database": {
    "host": "localhost",
    "port": 5432,
    "name": "myapp"
  }
}

YAML:

database:
  host: localhost
  port: 5432
  name: myapp

配列 / シーケンス

JSON:

{
  "servers": ["web1", "web2", "web3"]
}

YAML:

servers:
  - web1
  - web2
  - web3

ネストされた構造

JSON:

{
  "services": [
    {
      "name": "api",
      "ports": [8080, 8443],
      "env": {"NODE_ENV": "production"}
    }
  ]
}

YAML:

services:
  - name: api
    ports:
      - 8080
      - 8443
    env:
      NODE_ENV: production

当サイトのJSONからYAMLへのコンバーターで即座に変換できます。

注意すべきエッジケース

1. コメント

YAMLはコメントをサポートしていますが、JSONはサポートしていません。YAMLからJSONに変換すると、すべてのコメントが失われます:

# このコメントはJSONでは失われます
database:
  host: localhost  # これも失われます

2. 複数行文字列

YAMLにはJSONにない強力な複数行構文があります:

description: |
  This is a multi-line
  string that preserves
  line breaks.

JSONでは以下のようになります:

{
  "description": "This is a multi-line\nstring that preserves\nline breaks.\n"
}

3. 型の曖昧さ

YAMLは型を自動検出するため、問題が発生する場合があります:

version: 1.0    # 浮動小数点数であり、文字列 "1.0" ではない
port: 080       # 8進数の64であり、文字列 "080" ではない
country: NO     # ブール値のfalseであり、文字列 "NO" ではない

JSONでは型は明示的です:

{
  "version": "1.0",
  "port": "080",
  "country": "NO"
}

JSONからYAMLに変換する際は、誤って解釈される可能性のある値を引用符で囲みましょう。

4. Null値

両方ともnullをサポートしていますが、構文が異なります:

value: null     # 明示的
value: ~        # YAMLの省略形
value:          # 空の値 = null
{ "value": null }

5. キーの特殊文字

JSONのキーには任意のUnicode文字を含めることができます。特殊文字を含むYAMLキーには引用符が必要です:

"content-type": "application/json"  # ハイフンには引用符が必要
simple_key: value                    # アンダースコアは問題なし

コマンドラインでの変換

yq(YAMLプロセッサ)の使用

# JSONからYAMLへ
yq -P input.json > output.yaml

# YAMLからJSONへ
yq -o=json input.yaml > output.json

Pythonの使用

# JSONからYAMLへ
python3 -c "import json, yaml, sys; print(yaml.dump(json.load(sys.stdin), default_flow_style=False))" < input.json > output.yaml

# YAMLからJSONへ
python3 -c "import json, yaml, sys; print(json.dumps(yaml.safe_load(sys.stdin), indent=2))" < input.yaml > output.json

jq + yqの併用

# JSONを処理してYAMLとして出力
cat config.json | jq '.database' | yq -P

各フォーマットを使うべきタイミング

基準JSONYAML
人間による編集難しい(括弧、カンマ)簡単(クリーンな構文)
マシンによる解析高速低速
コメント非対応対応
データ交換標準(API)まれ
設定許容範囲推奨
厳密さ厳密(良い)柔軟(リスクあり)

JSONを使うべき場合: API通信、データストレージ、マシンが生成する設定、ブラウザ環境。

YAMLを使うべき場合: 人間が編集する設定、Docker Compose、Kubernetes、CI/CDパイプライン、Ansible。

より詳しい比較は、YAMLとJSONの比較の記事をご覧ください。

FAQ

YAMLはJSONのスーパーセットですか?

はい、YAML 1.2(2009年)以降、すべての有効なJSONドキュメントは有効なYAMLでもあります。YAMLパーサーはJSONを直接解析できます。ただし、その逆は成り立ちません — コメント、アンカー、複数行文字列などのYAML機能にはJSONでの対応がありません。

JSONとYAML、どちらの解析が速いですか?

ほぼすべての言語でJSONの解析が大幅に速くなります。JSONパーサーは、処理する構文が少ないためシンプルです。起動時に一度だけ読み込む設定ファイルの場合、その差はわずかです。高スループットのデータ処理では、JSONが明らかに優れた選択です。

関連リソース

Published on 2025-06-21
JSON to YAML Conversion: A Complete Migration Guide | alltools.one