NordVPN
広告厳格なノーログポリシーと6000台以上のサーバーで、安全かつ高速なネット接続を提供するVPN。
詳細を見る →左のJSONを編集すると右のYAMLが即時更新され、右のYAMLを編集すると左のJSONが更新されます。「JSON整形」「スワップ」「コピー」ボタン付き。変換はすべてブラウザ内で完結し、データは外部に送信されません。
JSON(JavaScript Object Notation)は2000年代初頭にDouglas Crockfordが設計したデータ交換フォーマットです。JavaScriptのオブジェクトリテラル構文を基にしており、ダブルクォート・カンマ・括弧という厳格な文法によって曖昧さがなく、ほぼすべての言語に標準パーサーが存在します。XMLに比べてコンパクトでJavaScriptとの親和性が高く、Web APIで標準となりました。
YAML(YAML Ain't Markup Language)は2001年にClark EvansとIngy döt Netが設計した、人間にとって読みやすいシリアライゼーション形式です。YAML 1.2はJSONの完全なスーパーセットで、すべての有効なJSONは有効なYAMLでもあります。コメント・インデントベースの階層・マルチラインstring・型推論などの機能を追加し、設定ファイルの記述に適しています。
JSONはAPIレスポンス・データベースレコード・サービス間通信など、機械がデータを読む場面に最適です。パーサーの実装がシンプルで、全言語でほぼ同一の挙動が保証されます。コードが主な消費者であれば、JSONがほとんどのケースで正解です。
YAMLはDocker Compose・Kubernetesマニフェスト・GitHub Actionsワークフロー・Ansibleプレイブックなど、開発者が手動で編集する設定ファイルに強みを発揮します。コメントによるインラインドキュメント、ブレースを使わない階層表現、マルチライン文字列のサポートが、設定ファイルの可読性を高めます。
YAMLのインデント感度は最も一般的なエラー源です。JSONのブレースと異なり、スペース1つのずれが構造を変えます。また、YAMLは型推論を行うため、裸の yes が boolean の true に、0755 が8進数に変換されることがあります。本ツールは型を保持するため、数値・真偽値に見える文字列は自動的にクォートで囲みます。
特殊文字も注意が必要です。コロン+スペース(: )・ハッシュ(#)・先頭の特殊記号({, [)を含む文字列はYAMLでクォートが必要です。本ツールはこれらを自動処理しますが、アンカー・エイリアス・マルチラインブロックスカラーなどの高度なYAML機能には非対応で、明確なエラーを表示します。
はい。YAML 1.2はJSONの厳格なスーパーセットです。すべての有効なJSONドキュメントは有効なYAMLです。逆(YAML→JSON)は常に成立しません。コメント・アンカー・ブロックスカラーなどのYAML固有機能にJSONの対応がないためです。
設定ファイルが主な用途です。Docker Compose(docker-compose.yml)・Kubernetesマニフェスト・GitHub Actions(.github/workflows)・Ansibleプレイブックなどがその代表例です。開発者が手動で編集するファイルにYAMLの可読性が活きます。
人間が編集するならYAMLが有利です。コメントが書けて視覚的にも整理しやすいためです。機械生成・機械消費の設定にはJSONが向いています。ESLint・Prettier・tsconfigなど多くのツールが両形式に対応しています。
コロン+スペース(: )・先頭の { [ # 等・真偽値や数値に見える値は、クォートで囲む必要があります。シングルクォートはエスケープなし、ダブルクォートはJSONと同様のバックスラッシュエスケープです。本ツールは必要な箇所を自動クォートします。
JSONがサポートする型(文字列・数値・真偽値・null・オブジェクト・配列)については無損失です。YAMLの型推論によるデータ欠損を防ぐため、誤認される可能性がある文字列はクォートします。
PyYAMLライブラリを使います。import yaml, json; data = yaml.safe_load(open('file.yaml')); print(json.dumps(data, indent=2)) で変換できます。safe_load は任意のYAMLタグを実行しないため安全です。
js-yamlパッケージを使う方法が一般的です。const yaml = require('js-yaml'); const obj = JSON.parse(fs.readFileSync('file.json')); console.log(yaml.dump(obj))。外部依存なしで書く場合は、本ツールのような純粋なシリアライザを実装します。
アンカー(&name)・エイリアス(*name)・型タグ(!!int等)・マルチラインブロックスカラー(| や >)・ドキュメント区切り(---)は非対応です。これらは実務YAML全体の5%未満です。これらが必要な場合は専用のYAMLライブラリをご利用ください。
最終更新: