本文へスキップ
Case Converter Online
ja

JSON YAML 変換ツール

JSON を貼り付けるときれいな YAML に、向きを切り替えれば YAML を JSON に変換できます。変換は入力と同時にブラウザ内で行われます。

JSON を貼り付けるか、「サンプル」を押してください。変換はブラウザ内で行われます。

JSON と YAML:同じデータの2つの書き方

JSON と YAML は同じものを表現できます。オブジェクト(YAML ではマッピングと呼びます)、リスト、文字列、数値、真偽値、null です。JSON は波かっこ、角かっこ、クォート、カンマを使います。YAML はインデントとハイフンを使うので、短く、人が読んだり手で編集したりしやすくなります。そのため Kubernetes、Docker Compose、GitHub Actions、Ansible などのツールは設定に YAML を使い、API はふつう JSON でやり取りします。

この2つの間を行き来する場面はよくあります。API が返した JSON を設定ファイルに入れたいとき。あるいは YAML の設定を、JSON しか読めないプログラムに渡したいとき。この変換ツールは、どちらの向きにも対応しています。

使い方

  1. JSON から YAML または YAML から JSON のボタンで、変換の向きを選びます。
  2. 左のボックスにデータを貼り付けるか、ファイルを開く または サンプル を押します。入力に合わせて右側に結果が表示されます。
  3. インデント をスペース2つかスペース4つから選びます。YAML から JSON の向きでは「圧縮」も選べます。
  4. JSON から YAML の向きでは、キーを並べ替え をオンにすると、キーがアルファベット順(A→Z)に並びます。
  5. コピー を押すか、ダウンロード で .yaml または .json ファイルとして保存します。

向きを切り替えると、今の結果が入力欄に移るので、行ったり来たり変換して、往復しても同じになるか確かめられます。

JSON から YAML への変換例

{"name":"web-app","version":3,"private":true,"ports":[80,443],"database":{"host":"localhost","password":null},"tags":["api","v2"]}

これが次のようになります。

name: web-app
version: 3
private: true
ports:
  - 80
  - 443
database:
  host: localhost
  password: null
tags:
  - api
  - v2

安全なクォート

文字列の中には、YAML のパーサーから見ると別の型に見えるものがあります。このツールはそうした文字列をクォートで囲み、文字列のまま保ちます。次の JSON は

{"zip":"02134","enabled":"yes","version":"1.10","note":"a: b","empty":""}

こうなります。

zip: "02134"
enabled: "yes"
version: "1.10"
note: "a: b"
empty: ""

クォートがないと、02134 は先頭のゼロが消え、1.10 は数値の 1.1 になり、古い YAML 1.1 のパーサー(PyYAML や多くの CI ツールがこのルールを使っています)は yes を true と読んでしまいます。このツールはより厳しいクォートのルールに従うので、古いパーサーでも新しいパーサーでも同じ意味に読まれます。"2024-01-15" のような日付も、同じ理由でクォートされます。郵便番号や電話番号のように先頭が 0 の値も、文字列のまま残ります。

YAML から JSON への変換例

# App settings
name: web-app
ports:
  - 80
  - 443
debug: false
retries: 3
owner: ~

これが次のようになります。

{
  "name": "web-app",
  "ports": [
    80,
    443
  ],
  "debug": false,
  "retries": 3,
  "owner": null
}

JSON にはコメントがないのでコメントは消え、YAML で null を表す省略記法の ~ は null になっています。

マージキーも展開されます。次の Rails 風のファイルは

defaults: &defaults
  adapter: postgres
  host: localhost
development:
  <<: *defaults
  database: dev_db

こうなります。

{
  "defaults": {
    "adapter": "postgres",
    "host": "localhost"
  },
  "development": {
    "adapter": "postgres",
    "host": "localhost",
    "database": "dev_db"
  }
}

--- で区切られた2つのドキュメント(たとえば kind: Service と kind: Deployment)は、1つの配列になります。「圧縮」を選ぶと [{"kind":"Service"},{"kind":"Deployment"}] となります。

値の読み取り方

YAML から JSON への変換は、YAML 1.2 のルールに従います。このルールでは yes、no、on はただの文字列で、真偽値になるのは true と false だけ、日付も文字列のままです。次の入力は

a: yes
b: no
c: on
d: true
e: 010
f: 0o10
g: 1e3
h: 2024-01-15

(圧縮した形で)次のように変換されます。

{"a":"yes","b":"no","c":"on","d":true,"e":10,"f":8,"g":1000,"h":"2024-01-15"}

010 は10として読まれ、0o10 は8進数の8である点に注意してください。

テキストのまま残したい値は、YAML の中でクォートで囲んでください。

往復変換をきれいに行うコツ

  • JSON を YAML に変換して戻すと、データは同じになりますが、テキストまで同じになるとは限りません。キーを並べ替え をオンにしない限り、キーの順序は保たれます。
  • YAML のコメント、アンカー、カスタムタグに相当するものは JSON にありません。アンカーはデータの完全なコピーに展開されます。
  • 20桁の ID のような非常に大きな整数は、ブラウザが対応していれば、JSON から YAML への変換では正確に保たれます。YAML から JSON への変換では JavaScript の数値を経由するので、長い ID はクォートした文字列として保存してください。
  • ファイルは端末内にとどまります。何もアップロードされません。

エラー

ミスは行と列で報告され、入力欄で表示 でその場所へ移動できます。JSON の末尾にカンマがあると 3行目、1列目:"}" の前の末尾のカンマは使えません と表示されます。YAML でキーが重複していると、YAML ライブラリの英語のメッセージ Map keys must be unique が表示され、インデントにタブを使っているとエラーになります。YAML ではスペースしか使えないためです。

ほかの変換方法

yq:Go 版の yq はコマンドラインで変換できます。JSON は正しい YAML でもあるので JSON を入力として読み込め、どちらの形式でも出力できます。

Python:PyYAML パッケージを使えば、yaml.safe_dump(json.load(f)) で JSON ファイルから YAML を書き出せます。PyYAML は YAML 1.1 に従うので、yes や no のような文字列は確認してください。

VS Code:選択範囲を JSON と YAML の間で変換するコマンドを追加する拡張機能がいくつかあります。

関連ツール

YAML ファイルを変換せずに整えるには YAML整形ツール を使ってください。先に JSON をチェックしたり整形したりするには JSON整形ツール を使います。スプレッドシートのデータなら、まず CSV JSON 変換ツール から始めてください。

JSON YAML 変換のよくある質問

YAML の一部の値がクォートで囲まれているのはなぜですか?

YAML のパーサーが別の型として読んでしまう可能性のある文字列は、クォートで囲みます。"02134" は数値の 2134 になってしまい、"yes" は古いパーサーでは true になってしまいます。クォートで囲めばテキストのまま保たれるので、YAML が JSON とまったく同じ意味になります。

YAML を JSON に変換すると、コメントはどうなりますか?

JSON にはコメントがないため削除されます。もう一度 YAML に戻しても、コメントは戻りません。コメントが大切な場合は、元の YAML ファイルを残しておいてください。

複数の YAML ドキュメントを含むファイルも変換できますか?

はい。--- で区切られたドキュメントは、1ドキュメントにつき1要素の JSON 配列に、同じ順序で変換されます。

アンカーとマージキーには対応していますか?

はい。*defaults のようなエイリアスは参照先のデータに置き換えられ、<<: *defaults と書かれたマージキーは、Docker Compose や Rails が想定するとおりマッピングに統合されます。

データはアップロードされますか?

いいえ。どちらの向きの変換もブラウザ内で行われます。貼り付けたり開いたりしたものがどこかに送信されることはありません。

その他のコード・データツール

すべてのツールを見る