m moji kit v1.0.9
Y
変換

JSON ↔ YAML 変換

JSON データを YAML に、または YAML を JSON に変換します。入力形式は自動判定 / 手動指定の両方に対応、YAML 側のインデント幅とフロースタイル (インライン記法) も切替可能。

サンプル

こんなときに使う

API レスポンスを Kubernetes マニフェストに転記する

JSON で返ってきた API レスポンスを YAML に変換して、k8s ConfigMap などに貼ります。

GitHub Actions の入力サンプルを試す

GitHub Actions の workflow は YAML ですが、サンプルを JSON で受け取ったときに変換して使えます。

Ansible playbook と JSON 設定の相互運用

Ansible は YAML が標準ですが、外部ツールが JSON を吐く場合があります。本ツールで橋渡し。

「YAML が好きな同僚」と「JSON が好きな同僚」の差を埋める

チーム内のフォーマット好みの違いを意識せず、共通の構造化データを扱えるようにします。

コメント付きの設定を JSON 化する前段

YAML はコメント可、JSON は不可。コメント付き YAML を JSON 化するとコメントは捨てられる、という挙動の確認に。

OpenAPI / Swagger の JSON ↔ YAML 切替

OpenAPI 仕様は JSON / YAML どちらも使えます。可読性のため YAML、ツール連携のため JSON、と用途で切り替えるとき本ツールが便利。

よくあるエラーと対処

ERR YAML パースエラー: タブ文字が含まれる
原因
YAML 1.2 ではインデントは空白文字のみ許可されています。タブはエラーになります。
対処
事前にタブをスペースに置換してください(多くは 2 スペースに置換)。
ERR YAML から JSON にしたら yes/no が真偽値になった
原因
YAML 1.1 互換のパーサは yes/no/on/off を真偽値として解釈します。
対処
文字列として保持したい場合は YAML 側でクォートで囲む('yes' のように)。本ツールは YAML 1.2 系で boolean は true/false のみに限定します。
ERR JSON から YAML にしたら数値文字列が裸の数値になった
原因
JSON で文字列だった "01234" が YAML で 1234 と解釈されることがあります。
対処
本ツールは YAML 出力で数値文字列をクォートで囲みます。手動で出力結果を確認してください。
ERR アンカー&エイリアス(&base / *base)が失われる
原因
JSON にはアンカーの概念がないため、YAML→JSON 変換で値が展開されます。逆方向ではアンカーが付与されません。
対処
アンカーが必要なら、変換後に手動で追加してください。可逆な変換ではない点に注意。

CLI / 他言語でやる方法

yq
yq -o json input.yaml

JSON to YAML は -o yaml。jq の YAML 版。

Python
python -c "import json, sys, yaml; print(yaml.safe_dump(json.load(sys.stdin)))" < input.json

PyYAML の safe_dump を使用。逆方向は yaml.safe_load → json.dumps。

js-yaml (Node)
node -e "const y = require('js-yaml'); const j = require('./in.json'); console.log(y.dump(j))"

本ツールも js-yaml を内部で使用。

よくある質問

JSON はそのまま YAML として有効ですか?
はい。JSON は YAML 1.2 のサブセットです。{ "a": 1 } をそのまま YAML としてパースすると同じ意味になります。可読性のためインデント形式に変換することが多いです。
コメントは保持されますか?
JSON にはコメント機能がないため、YAML→JSON で失われます。逆方向もコメント付与は手動です。
アンカー(&)とエイリアス(*)は?
JSON 側の表現がないので、YAML→JSON 時には展開された値が出ます。重複が増える可能性があります。
フロースタイルとブロックスタイルとは?
フローは [1, 2, 3] のような JSON 風インライン、ブロックは - 1 のような改行ベース。短い配列はフロー、長いものはブロックが読みやすいです。
YAML 1.1 と 1.2 の違いは?
1.1 は yes/no/on/off を真偽値扱い、1.2 は true/false のみ真偽値で JSON 互換性を優先。本ツールは 1.2 系(js-yaml デフォルト)です。
対応する文字コードは?
UTF-8 のみです。Shift_JIS / EUC-JP の YAML / JSON は事前に文字コード変換してください。
ネストが深くても変換できる?
数 MB 程度までは問題なく変換できます。それ以上はブラウザが重くなるので CLI 推奨。
YAML 内に JSON を文字列として埋めたい
YAML の文字列リテラルとして書けば OK です。複数行は | や > 演算子を使うと改行を保持できます。

もっと深く知る

公式ドキュメント / 仕様

学習サイト / 記事

※ Amazon へのリンクはアフィリエイトリンク(Amazon アソシエイト)を含みます。

関連ツール