TOML to JSON 변환이란?
TOML(Tom's Obvious Minimal Language)은 사람이 읽기 쉽도록 설계된 설정 파일 형식입니다. 해시 테이블에 명확하게 매핑되며, 중첩 테이블, 타입이 지정된 값, 인라인 주석을 지원합니다. 많은 도구와 프레임워크가 TOML을 기본 설정 형식으로 사용합니다. Rust 프로젝트는 Cargo.toml에 의존하고, Python 패키징은 pyproject.toml을 사용하며, Hugo 정적 사이트는 config.toml로 구성됩니다. TOML to JSON 온라인 변환을 사용하면 이러한 설정 파일을 거의 모든 프로그래밍 언어, API, 데이터 파이프라인이 기본적으로 처리할 수 있는 형식으로 변환할 수 있습니다.
JSON(JavaScript Object Notation)은 RFC 8259로 정의된, 가장 널리 지원되는 데이터 교환 형식입니다. TOML이 최소한의 문법과 주석 지원으로 사람의 가독성을 우선시하는 반면, JSON은 기계 간 상호운용성을 우선시합니다. TOML to JSON 변환기는 TOML v1.0.0 사양에 따라 TOML 입력을 파싱하고, 구조적으로 동등한 JSON 문서를 생성하여 이 간극을 연결합니다. 변환 시 모든 데이터가 보존됩니다. 문자열, 정수, 부동소수점, 불리언, 배열, 테이블이 각각 JSON의 대응 타입으로 직접 매핑됩니다.
TOML에는 JSON으로 직접 표현할 수 없는 네 가지 기본 날짜/시간 타입이 있습니다. 오프셋 날짜-시간, 로컬 날짜-시간, 로컬 날짜, 로컬 시간이 그것입니다. 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은 무한대(infinity)와 NaN 부동소수점 값도 지원하지만, 이는 JSON으로 표현할 수 없어 엄격 모드에서 변환 오류가 발생합니다.
코드 예제
네 가지 언어로 작성된 TOML to 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