TOMLからJSONへの変換とは?
TOML(Tom's Obvious Minimal Language)は人間向けに設計された設定ファイルフォーマットです。ハッシュテーブルへの明確なマッピング、ネストされたテーブル、型付きの値、インラインコメントをサポートしています。多くのツールやフレームワークがTOMLをデフォルトの設定フォーマットとして採用しています。RustプロジェクトはCargo.tomlに依存し、PythonパッケージングはpyProject.tomlを使用し、HugoスタティックサイトはConfig.tomlで設定されます。TOMLをJSONにオンラインで変換することで、事実上すべてのプログラミング言語・API・データパイプラインがネイティブに利用できるフォーマットへ設定ファイルを変換できます。
JSON(JavaScript Object Notation)はRFC 8259で定義された、最も広くサポートされているデータ交換フォーマットです。TOMLが最小限の構文とコメントサポートで人間の可読性を重視するのに対し、JSONはマシン間の相互運用性を優先します。TOML to JSONコンバーターは、TOML v1.0.0仕様に従ってTOML入力を解析し、構造的に等価なJSONドキュメントを出力することでこのギャップを埋めます。変換はすべてのデータを保持します。文字列、整数、浮動小数点数、ブール値、配列、テーブルは直接対応するJSONの型にマッピングされます。
TOMLにはJSONで直接表現できない4つのネイティブな日付・時刻型があります:オフセット日時、ローカル日時、ローカル日付、ローカル時刻です。JSONには日付型がないため、変換時にこれらの値はISO 8601文字列としてシリアライズされます。
TOML to JSONコンバーターを使う理由
TOMLで記述された設定ファイルは、JSONのみを受け付けるシステムに渡す必要があることが多くあります。手動でファイルを書き直したり、パーサーライブラリをローカルにインストールしたりする代わりに、ブラウザベースのコンバーターが数秒で変換を処理します。
TOML to JSONのユースケース
TOML to JSON 型マッピングリファレンス
TOMLのすべての型には対応するJSON等価物があります。ただし日付と時刻の値は例外です。以下の表は各TOML型がJSONにどのように変換されるかを示しています。このマッピングはTOML v1.0.0仕様に従い、tomllib(Python)、toml-rs(Rust)、@iarna/toml(Node.js)などの標準パーサーの動作と一致しています。
| 型 | TOML構文 | JSON出力 |
|---|---|---|
| String | "value" | "value" |
| Integer | 42 | 42 |
| Float | 3.14 | 3.14 |
| Boolean | true / false | true / false |
| Offset Date-Time | 1979-05-27T07:32:00Z | "1979-05-27T07:32:00Z" |
| Local Date-Time | 1979-05-27T07:32:00 | "1979-05-27T07:32:00" |
| Local Date | 1979-05-27 | "1979-05-27" |
| Local Time | 07:32:00 | "07:32:00" |
| Array | [1, 2, 3] | [1, 2, 3] |
| Table | [section] | { "section": {} } |
| Inline Table | { key = "val" } | { "key": "val" } |
| Array of Tables | [[items]] | "items": [{}] |
TOML整数は可読性のためにアンダースコア(例:1_000_000)、16進数(0xDEADBEEF)、8進数(0o755)、2進数(0b11010110)リテラルをサポートしています。これらはすべてJSONでは通常の10進数に変換されます。TOMLは無限大とNaNの浮動小数点値もサポートしていますが、これらにはJSON表現がないため、厳格モードでは変換エラーになります。
コード例
4つの言語によるTOMLからJSONへの変換の実例です。それぞれTOMLファイルを読み込み、解析して、整形済みのJSONを出力します。
import { parse } from '@iarna/toml'
import fs from 'fs'
const toml = fs.readFileSync('config.toml', 'utf8')
const json = parse(toml)
console.log(JSON.stringify(json, null, 2))
// Input: [server]
// host = "localhost"
// port = 8080
// Output: { "server": { "host": "localhost", "port": 8080 } }import tomllib # Python 3.11+ (standard library)
import json
with open('config.toml', 'rb') as f:
data = tomllib.load(f)
print(json.dumps(data, indent=2, default=str))
# Dates become strings: "1979-05-27"
# Arrays of tables become JSON arrays of objectspackage main
import (
"encoding/json"
"fmt"
"os"
"github.com/BurntSushi/toml"
)
func main() {
var data map[string]any
_, err := toml.DecodeFile("config.toml", &data)
if err != nil {
panic(err)
}
out, _ := json.MarshalIndent(data, "", " ")
fmt.Println(string(out))
}# Using yj (YAML/JSON/TOML converter) cat config.toml | yj -tj # Using dasel dasel -f config.toml -r toml -w json # Using Python one-liner (3.11+) python3 -c "import tomllib, json, sys; print(json.dumps(tomllib.load(sys.stdin.buffer), indent=2, default=str))" < config.toml