JSONからYAMLコンバーター
JSONをYAML形式に変換
JSON入力
YAML出力
JSONからYAMLへの変換とは?
JSONからYAMLへの変換は、JavaScript Object Notation(JSON)のデータをYAML Ain't Markup Language(YAML)に変換する処理です。両フォーマットはオブジェクト、配列、文字列、数値、真偽値、nullという同じデータ構造を表現できますが、構文が異なります。JSONは波括弧・角括弧・カンマを使用し、YAMLはインデントと改行を使用するため、プレーンテキストに近い読みやすい出力を生成します。XMLとは異なり、どちらのフォーマットもスキーマを必要としません。
YAMLは人間が読みやすいデータシリアライゼーション形式として設計されました。Kubernetesマニフェスト、Docker Composeファイル、Ansibleプレイブック、GitHub Actionsワークフロー、その他多くのCI/CDシステムのデフォルト設定言語です。ソースデータがJSONで、ターゲットシステムがYAMLを要求する場合、データの損失なしにすべての値・型・ネスト階層を正確に保持するコンバーターが必要です。
JSONでAPIレスポンスやエクスポートデータを受け取り、YAML設定ファイルに貼り付ける必要がある場合、オンラインでのJSON→YAML変換が役立ちます。変換はすべての標準JSONタイプに対してロスレスです。文字列、数値、真偽値、null、配列、オブジェクトはそれぞれ対応するYAML形式に直接マッピングされます。コロンや特殊文字を含む値は自動的に引用符で囲まれ、有効なYAML出力が保証されます。
なぜJSONをYAMLに変換するのか?
YAMLは設定ファイルの標準形式であり、JSONはAPIが返すフォーマットです。両者を相互変換することで、データを手動で書き直すことなく、各タスクに適したフォーマットを使用できます。
JSON to YAML のユースケース
JSON vs YAML 比較
JSONとYAMLは同じデータを表現できますが、構文と機能は特定のユースケースに影響する点で異なります。
| 機能 | JSON | YAML |
|---|---|---|
| Syntax | Curly braces, square brackets, colons, commas | Indentation-based, colons, dashes |
| Readability | Moderate — nested brackets become dense | High — visual hierarchy from indentation |
| Comments | Not allowed (RFC 8259) | Supported with # |
| Multi-line strings | Escape sequences only (\n) | Block scalars with | or > |
| Data types | string, number, boolean, null, object, array | Same plus date, timestamp, binary |
| File size | Slightly larger (brackets + quotes) | Slightly smaller (no brackets) |
| Trailing commas | Not allowed | Not applicable (no commas) |
| Spec | RFC 8259 / ECMA-404 | YAML 1.2 (yaml.org) |
変換後のYAMLに関する注意点
YAMLにはJSONに慣れた開発者を驚かせる構文規則があります。以下の4つの問題が変換後の出力で最も多くのバグを引き起こします。
コード例
プログラムでJSONをYAMLに変換するには、ほとんどの言語でYAMLシリアライゼーションライブラリが必要です。標準ライブラリはJSONの解析を処理しますが、YAML出力には追加パッケージが必要です。
import YAML from 'js-yaml'
const json = '{"host":"localhost","port":3000,"debug":true}'
const obj = JSON.parse(json)
const yamlStr = YAML.dump(obj, { indent: 2 })
console.log(yamlStr)
// → host: localhost
// → port: 3000
// → debug: trueimport json, yaml
json_str = '{"host": "localhost", "port": 3000, "debug": true}'
data = json.loads(json_str)
yaml_str = yaml.dump(data, default_flow_style=False, sort_keys=False)
print(yaml_str)
# → host: localhost
# → port: 3000
# → debug: truepackage main
import (
"encoding/json"
"fmt"
"gopkg.in/yaml.v3"
)
func main() {
jsonStr := `{"host":"localhost","port":3000,"debug":true}`
var data map[string]interface{}
json.Unmarshal([]byte(jsonStr), &data)
yamlBytes, _ := yaml.Marshal(data)
fmt.Println(string(yamlBytes))
// → debug: true
// → host: localhost
// → port: 3000
}# Using yq (https://github.com/mikefarah/yq)
echo '{"host":"localhost","port":3000}' | yq -P
# → host: localhost
# → port: 3000
# Using Python one-liner
echo '{"host":"localhost","port":3000}' | python3 -c "import sys,json,yaml; print(yaml.dump(json.load(sys.stdin), default_flow_style=False))"