本文へスキップ

JSONをTOML形式に変換 — Numio

JSON オブジェクトを TOML に変換します。ネストしたオブジェクトは [table] セクション、オブジェクトの配列は [[array of tables]] になります。TOML には null がないため、値が null のキーは削除されます。

JSON の設定を pyproject.toml、Cargo.toml、wrangler.toml、Hugo の設定の書式に変換する。

JSON

TOML

こんなときに使えます

  • JSON の設定を pyproject.toml、Cargo.toml、wrangler.toml、Hugo の設定の書式に変換する。
  • スクリプトが JSON で生成した設定を、TOML ベースの設定ファイルに移す。

使い方

  1. JSON オブジェクト(ルートは配列ではなくオブジェクト)を左側のエディターに貼り付けるか、ファイル読み込みボタンで UTF-8 のファイルを開きます。
  2. 右側の TOML を確認します。スカラーのキーが先に並び、その後に [table] と [[array]] のセクションが続きます。
  3. 結果をコピーし、設定を置き換える前に利用先ツールのドキュメントにあるキーと照らし合わせます。

JSON オブジェクト

{
  "title": "My App",
  "port": 8080,
  "debug": false,
  "owner": { "name": "Ada", "since": "2024-01-05T10:00:00Z" },
  "servers": [
    { "host": "a.example.com", "weight": 3 },
    { "host": "b.example.com", "weight": 1 }
  ],
  "ports": [80, 443]
}

TOML

title = "My App"
port = 8_080
debug = false
ports = [ 80, 443 ]

[owner]
name = "Ada"
since = "2024-01-05T10:00:00Z"

[[servers]]
host = "a.example.com"
weight = 3

[[servers]]
host = "b.example.com"
weight = 1

仕様と制限

1000 以上の整数にはアンダースコア区切りが入ります(8080 は 8_080)。有効な TOML で、解析すると同じ数値になります。

日付の文字列はクォート付きの文字列のままです。JSON に日付型はないため、TOML の日時値は生成されません。

値が null のキーは通知なく省略され、JSON の 1.0 は整数の 1 として書き出されます。

@iarna/toml を使ってブラウザ内で動作します。オブジェクトと他の値が混在するリストは、TOML のテーブル配列に収められないため拒否されます。サブテーブルは 2 スペースでインデントされますが、TOML はこのインデントを無視します。

FAQ

ルートが JSON 配列でも変換できますか?

いいえ。TOML のドキュメントはテーブルでなければならないため、JSON が配列であることを示し、{"items": [...]} のようにオブジェクトで囲むよう案内します。

null 値はどうなりますか?

キーごと削除されます。{"a": null} の出力は空になります。利用先がそのキーを必要とするなら、空文字列にするか、意図的にキーを削除してください。

数値にアンダースコアが入るのはなぜですか?

シリアライザーが大きな整数を _ の桁区切りで整形するためで、TOML の仕様で認められています。どの TOML パーサーも 8_080 を 8080 と読みます。

仕様を確認する