YAMLからJSONへの変換とは?
YAMLからJSONへの変換は、YAML(YAML Ain't Markup Language)で記述されたデータをJSON(JavaScript Object Notation)に変換する処理です。両フォーマットはキーと値のペア、シーケンス、ネストされたオブジェクトとして構造化データを表現できますが、構文が異なります。YAMLはインデントと最小限の句読点を使用し、JSONは波括弧、角括弧、必須の引用符を使用します。異なるフォーマットを要求するシステム間で設定データを移行する際、両者の変換は一般的なタスクです。
YAMLは人間が読みやすいように設計されています。コメント、複数行文字列、アンカー、エイリアスをサポートしており、これらはJSONには存在しません。YAMLをJSONに変換する際、これらのYAML固有の機能は解決されます:アンカーはインラインで展開され、コメントは破棄され、複数行ブロックはエスケープされた文字列になります。出力はあらゆるJSONパーサーが読める有効なJSONです。
YAML 1.2仕様はJSONをYAMLのサブセットとして明示的に定義しており、すべての有効なJSONドキュメントは有効なYAMLでもあります。逆は成立しません。コメント、アンカー、複合キーを使用するYAMLドキュメントには直接のJSON相当がなく、変換時に単純化する必要があります。このツールはその変換を自動的に処理し、有効なYAML入力からクリーンで整形されたJSONを生成します。
YAML 1.2 Specification — yaml.org →
なぜオンラインYAML→JSONコンバーターを使うのか?
YAMLを手動でJSONに変換するのは、特に深くネストされた構造や複数行の値がある場合にエラーが起きやすいです。ブラウザベースのコンバーターなら結果を即座に得られ、アプリケーションに到達する前にYAMLの構文エラーを検出できます。
YAML→JSONの活用場面
YAML→JSONタイプマッピング一覧
すべてのYAMLデータ型は変換時に特定のJSON型にマッピングされます。以下の表は各YAMLの構文とそのJSON出力を示しています。これらのマッピングを理解することで、YAMLデータが変換後にどのように見えるかを予測でき、真偽値やnull値の扱いで驚くことがなくなります。
| YAML型 | YAML構文 | JSON出力 |
|---|---|---|
| Mapping | name: Alice | { "name": "Alice" } |
| Sequence | - apple\n- banana | ["apple", "banana"] |
| String | greeting: hello world | "hello world" |
| Integer | count: 42 | 42 |
| Float | ratio: 3.14 | 3.14 |
| Boolean | active: true | true |
| Null | value: null | null |
| Multiline (|) | bio: |\n Line one\n Line two | "Line one\nLine two\n" |
| Folded (>) | note: >\n A long\n paragraph | "A long paragraph\n" |
| Anchor/Alias | &default\n <<: *default | Resolved inline (no $ref) |
YAMLとJSONの構文比較
YAMLとJSONは同じデータモデルを表現しますが、構文ルールが異なります。以下の違いから、コメントやアンカーなどの一部のYAML機能にJSON相当が存在しない理由がわかります。
コード例
以下はYAMLをプログラムでJSONに変換する実装例です。各例ではYAML文字列を解析して整形されたJSONを出力します。
import { load } from 'js-yaml'
const yamlStr = `
server:
host: localhost
port: 8080
ssl: true
`
const json = JSON.stringify(load(yamlStr), null, 2)
console.log(json)
// → {
// → "server": {
// → "host": "localhost",
// → "port": 8080,
// → "ssl": true
// → }
// → }import yaml, json
yaml_str = """
database:
host: db.example.com
port: 5432
credentials:
user: admin
password: s3cret
"""
data = yaml.safe_load(yaml_str)
print(json.dumps(data, indent=2))
# → {
# → "database": {
# → "host": "db.example.com",
# → "port": 5432,
# → "credentials": {
# → "user": "admin",
# → "password": "s3cret"
# → }
# → }
# → }package main
import (
"encoding/json"
"fmt"
"log"
"gopkg.in/yaml.v3"
)
func main() {
yamlData := []byte(`
services:
web:
image: nginx:latest
ports:
- "80:80"
`)
var obj map[string]interface{}
if err := yaml.Unmarshal(yamlData, &obj); err != nil {
log.Fatal(err)
}
jsonBytes, _ := json.MarshalIndent(obj, "", " ")
fmt.Println(string(jsonBytes))
// → { "services": { "web": { "image": "nginx:latest", "ports": ["80:80"] } } }
}# Convert a YAML file to JSON with yq
yq -o=json config.yaml > config.json
# Pipe YAML into yq for one-off conversion
echo "name: demo" | yq -o=json
# → { "name": "demo" }
# Python one-liner (no extra install on most systems)
python3 -c "import yaml, json, sys; print(json.dumps(yaml.safe_load(sys.stdin), indent=2))" < config.yaml