FIRST CH TOOLS / 20 JSON ⇄ YAML
JSON ⇄ YAML 相互変換&構文フォーマッター
どちらの欄に貼っても即時に反対側へ変換します。インデント幅や引用符の付け方を選んで整形でき、構文エラーは行と桁を指して何が悪いかを日本語で説明します。docker-compose や GitHub Actions の設定を読み替えるとき、APIのJSONを設定ファイルに写すときに。
どちらに入力しても即時変換されます
貼り付けた内容がブラウザの外へ出ることはありません(YAMLの解析も生成も、外部ライブラリを使わずこのページの中だけで動いています)。ファイルの読み込みも端末内で読むだけで、アップロードは行いません。URLパラメータで直接呼び出せます: /json-yaml/?yaml=a%3A%201 / /json-yaml/?json=%7B%22a%22%3A1%7D&indent=4
読み替えのときに壊れやすいところ
インデントにタブは使えない
web: → image: nginx # ← タブでの字下げはYAMLの仕様で禁止
YAMLは字下げに半角スペースしか認めていません。エディタの自動インデントがタブを入れると、環境によってエラー箇所が違って見えて原因を探しにくくなります。このツールはタブの字下げを見つけたら、その行と桁を指して知らせます。
yes / no / on / off が真偽値になる
country: NO # ノルウェーの国コード → true/false になる処理系がある enabled: yes # 文字列 "yes" ではなく true on: push # GitHub Actions のキー
YAML 1.1 はこれらを真偽値として扱い、YAML 1.2 は文字列として扱います。読む側のライブラリ次第で意味が変わるため、ノルウェーの国コード NO が false になる例から「Norway problem」と呼ばれます。このツールはYAML 1.2に従って文字列にしたうえで、該当する値を警告に出します。文字列として渡したいなら "yes" のように囲んでください。
0755 は8進数ではなく10進数の755になる
mode: 0755 # → 755(8進数の指定にはならない) mode: 0o755 # → 493(YAML 1.2 の8進数はこの書き方) mode: "0755" # → 文字列のまま渡る
パーミッション・郵便番号・電話番号・伝票番号のように先頭の0に意味がある値は必ず引用符で囲みます。囲まないと先頭の0が落ちた数値になります。
12:30 が 750 になる処理系がある
start: 12:30 # YAML 1.1 では60進数の整数 → 12*60+30 = 750 start: "12:30" # 文字列として渡る ports: - 8080:80 # こちらは60進数の形に合わないので文字列のまま
YAML 1.1 には60進数(sexagesimal)の整数があり、12:30 のような値が数値になります。時刻やバージョンを書くときは引用符で囲んでください。
値に : (コロン+空白)や # を含めるときは引用符が必要
title: 見出し: 補足 # エラー(キーが2つあるように見える) title: "見出し: 補足" # OK note: 100% 完了 #済 # → "100% 完了" になり #済 はコメント扱い url: http://example.com # コロンの後ろが空白でなければそのまま読める
YAMLがキーの区切りと見るのはコロンの直後に空白か行末が来たときだけです。コメントの開始と見るのは空白のあとの # だけなので、a#b は文字列のままです。
* と & で始まる値も引用符が必要
include: *.js # エラー(*.js という名前のアンカー参照だと解釈される) include: "*.js" # OK
&名前 はアンカー(この位置に名前を付ける)、*名前 はエイリアス(名前を付けた場所を参照する)です。glob パターンやワイルドカードを値に書くときは囲んでください。
複数行の文字列は | と > で意味が違う
literal: | # 改行をそのまま保つ(シェルスクリプト向き) echo one echo two folded: > # 改行を半角スペースへ畳む(長い文章向き) この文と この文はつながる strip: |- # 末尾の改行を落とす keep: |+ # 末尾の空行も残す
末尾の - と + は chomping と呼ばれる指定で、最後の改行を落とすか残すかを決めます。既定(指定なし)は改行1つだけ残します。このツールは複数行の文字列をYAMLへ書き出すとき、末尾の改行の有無に応じて | と |- を選び分けます。
アンカー・エイリアス・マージキーはJSONに写せない
defaults: &defaults adapter: postgres pool: 5 development: <<: *defaults # defaults の中身をここへ差し込む database: dev
JSONには参照の仕組みが無いので、展開した結果を書き出します(同じ内容が複製されます)。マージキー << は同じマップに書いた個別のキーより弱く、重なった場合は個別のキーが勝ちます。JSONへ変換したときは、この展開を行ったことを指摘に出します。
キーの重複はエラーにならないことが多い
image: nginx ports: ["80:80"] image: httpd # 後に書いた方が勝ち、前の指定は消える
仕様上は不正ですが、多くのライブラリはエラーにせず後の値で上書きします。長い設定ファイルを継ぎ足していくうちに起きやすく、気づきにくい事故です。このツールは重複したキーを見つけて警告します。
JSONにはコメントが書けない
{
// tsconfig.json などでは慣習的に使われている
"strict": true, // ← 末尾のカンマも本来は不正
}
JSONの仕様にコメントと末尾のカンマはありません。このツールは読み取って変換したうえで指摘します(実際に使われている設定ファイルを読めないと役に立たないため)。逆にYAML→JSONの変換では、YAMLに書いたコメントはJSONに残せないので消えます。
大きな整数は桁が落ちる
id: 12345678901234567890 # → 12345678901234567000 になる id: "12345678901234567890" # → 文字列として正確に保てる
JSONもYAMLも、数値はふつう倍精度浮動小数点数として読まれます。安全に表せるのは約9,007兆(2の53乗)までで、それを超えるIDは下の桁が変わります。SnowflakeのIDのような値は文字列にしてください。このツールは該当する数値を警告します。
対応しているYAMLの範囲: 複数ドキュメント(---)・ブロックマップ/シーケンス・フロー表記([…] {…})・引用スカラー(複数行・エスケープ)・ブロックスカラー(| > と chomping・明示インデント)・アンカー/エイリアス/マージキー・タグ(!!str !!int !!float !!bool !!null !!binary)・コメント。未対応は ? キー の明示キー記法(JSONのキーは文字列だけなので、通常の書き方に直してください)。
How to Use
- どちらかの欄に貼るJSONを左に貼れば右にYAMLが、YAMLを右に貼れば左にJSONが出ます。設定ファイルをドラッグ&ドロップしても読み込めます。
- 整形の仕方を選ぶインデント幅・引用符・キーの並び順を切り替えます。同じ形式のまま整えたいだけなら各欄の「整形」を押してください。
- 結果を確かめてコピーする構文エラーは行と桁を指して表示します。タブ字下げ・0755・yes・重複キーなど、読み替えで意味が変わる箇所は警告に出ます。
About This Tool
JSONとYAMLは同じデータ構造(マップ・配列・スカラー)を別の書き方で表したものです。JSONは括弧と引用符で構造を示すので機械が読みやすく、YAMLは字下げで構造を示すので人が読みやすい。設定ファイルはYAML、APIのやり取りはJSONという住み分けになりやすく、その境目で読み替えが必要になります。
YAMLはJSONの上位互換で、正しいJSONはそのまま正しいYAMLです(フロー表記がJSONの書き方そのものだからです)。逆向きはそうではありません。YAMLにはコメント・アンカー・複数ドキュメント・日付型など、JSONに対応するものが無い機能があるため、YAML→JSONでは必ず何かが落ちます。このツールは落ちるものを黙って消さず、コメントの消失・エイリアスの展開・複数ドキュメントの配列化として指摘に出します。
構文エラーは行と桁で示します。ブラウザの JSON.parse が出すメッセージは実装ごとに文面が違い、位置の示し方も揃っていません。ここではJSONもYAMLも自前で読み進めているため、どのブラウザでも同じ位置と同じ説明が出ます。エラー行の前後2行を抜き出し、^ で桁を指します。
YAMLは「読めるけれど意味が変わる」書き方が多い形式です。タブによる字下げ、0755 が10進数の755になること、yes や NO が真偽値になること(Norway problem)、12:30 が60進数の750になること、キーの重複が黙って上書きされること——このツールはこうした箇所を変換のたびに警告に出します。詳しくは「YAMLの落とし穴」タブにまとめています。
実際に使われているJSONも読みます。tsconfig.json のようなコメント入りのJSON、末尾にカンマが残ったJSON、シングルクォートや引用符なしのキーで書かれたJSONも読み取って変換し、「JSONとしては不正である」ことを指摘します。厳密さを理由に読めないより、読んだうえで直せる場所を教える方が役に立つと考えています。
YAMLを書き出すときは、意味が変わらない形を選びます。yes 0755 12:30 2026-08-12 のように別の型に読まれうる文字列、先頭や末尾に空白がある文字列、- や * で始まる文字列は自動で引用符で囲みます。改行を含む文字列は | のブロック表記にしますが、行末に空白がある場合など復元できない形のときは "…" に倒します。
数値は倍精度浮動小数点数として扱います。正確に表せるのは2の53乗(約9,007兆)までで、これを超える整数は下の桁が変わるため警告に出します。.inf と .nan はJSONに無い値なので null になります。
From AI Agents
この変換ロジックは、MCP(Model Context Protocol)サーバー @first-ch/tools-mcp の json_to_yaml / yaml_to_json ツールとしても提供しており、ブラウザを使わずAIエージェントから直接呼び出せます。ファイルパスを渡して読み書きもできます。導入方法の詳細は AIエージェントからの使い方 を参照してください。
導入
claude mcp add firstch-tools -- npx -y @first-ch/tools-mcp
呼び出し例
# JSON を YAML へ(インデント2・必要なときだけ引用符)
json_to_yaml(text='{"name":"web","ports":["80:80"]}')
# YAML を JSON へ(1行にまとめる)
yaml_to_json(text="name: web\nports: [80:80]", indent=0)
# 設定ファイルを読んで変換し、別ファイルへ書き出す
json_to_yaml(path="/tmp/config.json", outputPath="/tmp/config.yaml", indent=4)
# 構文チェックだけしたい(エラーの行・桁と指摘が返る)
yaml_to_json(path="/tmp/docker-compose.yml")
Other Tools
- 01画像→WebP一括変換WebP Converter
- 02白背景の透過White BG Remover
- 03コントラスト比チェッカーContrast Checker
- 04文字数カウントCharacter Counter
- 05llms.txt ジェネレーターllms.txt Generator
- 06JSON-LD構造化データ生成JSON-LD Generator
- 07Markdown→PDF変換MD → PDF
- 08OGPメタタグ生成ウィザードOGP Wizard
- 09faviconジェネレーターFavicon Generator
- 10TikTok投稿ツールTikTok Publisher
- 11文字コード・改行コード変換Encoding Converter
- 12画像→AVIF変換+picture生成AVIF Converter
- 13テストデータ生成Test Data Generator
- 14Marp Markdown→スライドMarp Slides
- 15テキスト・コード差分チェッカーDiff Checker
- 16Cron式ビジュアル解説&発火日時Cron Explainer
- 17Base64 & Data URI変換Base64 & Data URI
- 18URLパラメータ分解・UTMタグ編集URL Parameters
- 19HTMLエンティティ・特殊文字エスケープHTML Escape
- 21PX ⇄ REM / EM 単位変換&スケール表PX ⇄ REM / EM
- 22Colorコード変換&アルファ透過Color Converter
- 23MD5 / SHA-256 ハッシュ生成Hash Generator
- 24JWTデコーダー&有効期限チェッカーJWT Decoder
- 25User-Agent解析&デバイス判定User-Agent Parser
- 26UUID (v4) & ULID 一括生成UUID & ULID Generator
- 27アスペクト比計算&レスポンシブサイズAspect Ratio Calculator