分析と広告のためのCookie
分析と広告のためにCookieを使っており、どちらもGoogleに送られます。拒否しても、目に見える動作は何も変わりません。プライバシーポリシーを読む
ここで YAML を JSON に変換できます。無料、アカウント不要です。ファイルを上の枠に落とせば、数秒で結果がダウンロードできる状態になります。 変換はお使いのブラウザーの中で行われるので、ファイルはアップロードされません。Windows でも macOS でも Linux でも、iPhone でも Android でも同じように動き、通信を切っても動き続けます。
一度に100ファイルまで。フォーマットが混ざっていても構いません。
順番に変換し、まとめてZIPでダウンロードします。
YAML から JSON
YAML 1.2 は JSON の上位互換として設計されているため、JSON の文書はそのまま有効な YAML でもあります。この変換は、同じデータから省略記法をすべて取り除いて書き出しているにすぎません。だからこそデバッグに役立ちます。JSON に出てくるのは、入力した文字ではなく、パーサーが実際に導き出した値だからです
YAML でつまずく原因の多くは、値の解釈にまつわる意外な結果です。バージョン番号が数値になっていた、ある単語が真偽値として扱われていた、参照が想定より多くの内容を引き込んでいた。こうしたことは YAML の見た目からは分からず、JSON にすると一目で分かります。
YAML は --- という行で区切って、1つのストリームに複数の文書を持てます。Kubernetes のマニフェストではこれが日常的に使われ、1つのファイルの中に Deployment と Service と ConfigMap が並んでいることも珍しくありません。JSON にはこれに相当する仕組みがなく、1つの JSON ファイルは1つの値しか持てません。
そのため、パーサーはどれか1つを勝手に選ぶのではなく、その場で変換を拒否し、2つ目の文書が始まる行を示します。--- で区切って1文書ずつ変換するか、変換前に配列としてまとめておく必要があります。
アンカーとエイリアスは、参照先の内容をそのままコピーした形に展開されます。JSON には他の場所を参照する仕組みがないため、これが唯一の忠実な表現です。1か所に定義した内容を複数のジョブから参照している設定ファイルは、変換すると同じ内容が繰り返し現れる、元より大きな JSON になります。
つまずきやすいのはマージキーです。<< に続けてエイリアスを書く記法は、YAML 1.1 時代の慣習であり、このパーサーが実装する YAML 1.2 のコアスキーマには含まれません。そのため "<<" という名前の普通のキーとして、参照先のオブジェクトを値に持つ形でそのまま出てきます。マージされているはずだったキーは、想定より1階層深い場所にあります。
CloudFormation の短縮記法など、!Ref のような独自タグに意味を持たせる方言がいくつも存在します。このパーサーはそうしたタグを知らないため、それぞれを裸の値に解決してから先に進みます。!Ref myBucket は単なる文字列の "myBucket" になり、タグが付いていたという情報は残りません。
これはこのページで最も注意が必要な変換です。出てきた JSON は文法的に正しく、もっともらしく見えますが、意味が変わっています。独自タグを使う方言の YAML を扱っているなら、あらかじめそれを知っておくことが唯一の防御策です。
YAML 1.1 では yes、no、on、off、y、n がすべて真偽値として扱われ、国コードの no が false になってしまうという有名な問題を生みました。このパーサーが実装する YAML 1.2 のコアスキーマは true と false だけを真偽値として認識するため、こうした単語は文字列のまま残ります。
ただし、これはこのパーサーの既定の挙動にすぎません。ファイルの先頭に %YAML 1.1 という指示行があれば1.1として読まれ、on は真偽値になります。また、実際の運用で使われるパーサーが1.1系の実装であることもあるため、このページの結果は1.2のパーサーがどう見るかの参考として扱ってください。
1.0と書かれた値は数値の1として解決され、小数点が消えます。0755と書かれた値は755になります。元の値の周りに引用符を付ければ文字列のまま保たれ、JSONの出力にも引用符が現れます。この違いを見れば、引用符が必要な値を素早く洗い出せます。
大きな整数は精度が静かに失われることがあります。YAML の整数には桁数の制限がありませんが、JSON の数値は倍精度浮動小数点数なので、桁数の多いIDは末尾の桁が変わってしまうことがあります。大きな数値を扱う場合は、変換前に文字列として引用符で囲んでおいてください。
!!timestamp というタグを持つ値は日付として解釈され、UTC に正規化された ISO 8601 の文字列になります。マイナス5時間のオフセットを持つ時刻は、その分だけシフトされてZ付きの表記になり、元のオフセットの情報は残りません。
!!binary の値はバイト列に変換されたのち、位置をキーとするオブジェクトとして書き出されます。データ自体は保持されますが、その形をそのまま活用できるツールはほとんどありません。タグのない日付らしき文字列は、YAML 1.2のコアスキーマのもとでは単なる文字列として扱われ、そのまま残ります。
同じマッピングの中にキーの重複があると、行番号とともに拒否されます。他のツールより厳格に見えるかもしれませんが、重複キーというのは、片方の設定が追加された瞬間から無視され続けていたことを意味するので、これはむしろ正しい振る舞いです。
インデントにタブ文字が使われている場合も拒否されます。YAML の仕様でタブは禁止されているためです。どちらのエラーも、読み込むパーサーによって挙動が変わりかねないファイルであることを教えてくれています。
出力はスペース2つでインデントされ、末尾に改行が付くので、jq や JSON Schema のバリデーター、HTTP クライアントにそのまま渡せます。検証はこの変換を行う最も強い理由です。YAML の構文チェックは文法しか見ませんが、生成した JSON をスキーマに通せば、タイプミスしたキーのような意味的な誤りまで見つかります。
ただし YAML の代わりにはなりません。コメントは失われ、アンカーは重複したデータに展開され、独自タグは静かに消えています。YAML を正本として保ち、JSON はその一時的な見え方として扱ってください。
| YAML | JSON | |
|---|---|---|
| 正式名称 | YAML Ain't Markup Language | JavaScript Object Notation |
| 拡張子 | .yaml, .yml | .json |
| メディアタイプ | application/yaml | application/json |
| 最初の公開 | 2001 | 2001 |
| 仕様 | YAML 1.2 | RFC 8259 |
| ライセンス | オープン標準 | オープン標準 |
| 現在の位置づけ | 現行 | 現行 |
| ブラウザで開けるか | 対応なし | すべてのブラウザ |
| 代わりに検討される形式 | TOML | XML, NDJSON |
コメントは引き継がれません。YAML ではファイルに説明を書き添えられますが、JSON にはコメントの構文そのものがないので、説明の行はすべて落ちます。そして困るのは、まさにコメントが書かれるようなファイル——誰かが引き継ぐ設定ファイルです。
失われるものはありません。YAML も JSON も中身を劣化なしに保持します。この変換が変えるのは包み方であって品質ではないので、劣化が積み重なる心配をせずに何度でも繰り返せます。
JSON は今のブラウザーならどれでも開けます。YAML はそこまでも届きません。ファイルがウェブページや申込フォームへ向かうのであれば、たいていはそれがこの変換の理由のすべてです。
Visual Studio Codeは YAML と JSON のどちらも読めるので、別のプログラムを開かずに、結果を元のファイルと並べて確かめられます。
YAML は 2001 年に登場しました。 YAML 1.2 で規定されています。ファイルが、それを書いた道具より長く生きなければならないなら、この一点には値打ちがあります。
JSON は 2001 年から使われています。規定は RFC 8259 です。Visual Studio Code、jq、Postmanがこの形式を読めます。
いいえ。この変換は完全にブラウザーの中で行われるので、ファイルが端末から出ることはありません。ご自分で確かめられます。開発者ツールのネットワークタブを開いて、何か変換してみてください。ページそのものと、このサービスの費用をまかなっている分析・広告のリクエストは見えますが、あなたのファイルを運んでいるリクエストはひとつもありません。
はい。アカウントも透かしもなく、消費される 1 日の割り当てもありません。お使いの機械の上で動くので、何度でも戻ってきていただけます。ブラウザーが扱えるのは 100 MB までのファイルで、一度に 100 本です。
いいえ。JSON は同じ内容を何も捨てずに保持できるので、結果は品質の点で元のファイルと同じです。
失われるものはありません。YAML も JSON も中身を劣化なしに保持します。この変換が変えるのは包み方であって品質ではないので、劣化が積み重なる心配をせずに何度でも繰り返せます。
コメントは引き継がれません。YAML ではファイルに説明を書き添えられますが、JSON にはコメントの構文そのものがないので、説明の行はすべて落ちます。そして困るのは、まさにコメントが書かれるようなファイル——誰かが引き継ぐ設定ファイルです。