ToolDeck

JSON to TOML

JSON을 TOML 형식으로 변환

예시 시도

JSON 입력

TOML 출력

로컬에서 실행 · 시크릿 붙여넣기 안전
TOML 출력이 여기에 표시됩니다…

JSON to TOML 변환이란?

JSON to TOML 변환은 JavaScript Object Notation 데이터를 Tom's Obvious Minimal Language로 변환하는 작업입니다. JSON은 중괄호, 대괄호, 따옴표로 감싼 키를 사용해 구조화된 데이터를 표현합니다. TOML은 섹션 헤더(테이블)와 함께 평면적인 키-값 문법을 사용하며, INI 파일처럼 읽히지만 엄격한 타입 시스템을 갖춥니다. TOML은 기계 간 데이터 교환보다 사람이 읽기 쉬운 설정 파일에 최적화된 언어입니다.

TOML은 Rust(Cargo.toml), Python 패키징(pyproject.toml), Hugo 정적 사이트, Netlify 배포 설정, 다양한 CLI 도구의 기본 설정 형식으로 자리 잡았습니다. API 응답, 내보낸 설정, 생성된 파일 등 소스 데이터가 JSON이고 대상 시스템이 TOML을 요구할 때, JSON 객체를 TOML 테이블로, JSON 배열을 TOML 배열로 정확하게 매핑하는 변환기가 필요합니다.

온라인으로 JSON을 TOML로 변환하는 것은 기존 JSON 데이터에서 유효한 TOML을 생성하는 가장 빠른 방법입니다. 타입 매핑은 자동으로 처리됩니다. JSON 문자열은 TOML 문자열이 되고, JSON 숫자는 TOML 정수 또는 부동소수점이 되며, JSON 불리언은 그대로 매핑됩니다. JSON 객체는 TOML 테이블이 됩니다. 예외는 null입니다. TOML에는 null 타입이 없으므로, null 값은 변환기에 따라 키가 생략되거나 빈 문자열로 처리됩니다.

이 JSON to TOML 변환기를 사용하는 이유

TOML은 설정 파일이 요구하는 형식이고, JSON은 API와 도구가 생성하는 형식입니다. 이 변환기는 수동으로 다시 작성하지 않고 두 형식 사이를 오갈 수 있게 해 줍니다.

즉시 변환
JSON을 붙여 넣으면 TOML 출력이 즉시 나타납니다. 입력하는 즉시 변환이 실행되며 서버 요청이나 파일 업로드가 없습니다.
🔒
개인 정보 우선 처리
모든 변환은 브라우저에서 로컬로 처리됩니다. JSON에 포함된 설정 비밀값, API 키, 데이터베이스 자격 증명이 기기 밖으로 전송되지 않습니다.
🔀
전체 구조 지원
중첩 객체는 TOML 테이블이 되고, 객체 배열은 배열 테이블([[table]])이 되며, 혼합 타입 배열도 올바르게 처리됩니다.
📋
계정 불필요
페이지를 열고 바로 변환하세요. 회원 가입, 확장 프로그램 설치, CLI 의존성이 필요 없습니다. 최신 브라우저가 있는 모든 기기에서 작동합니다.

JSON to TOML 활용 사례

Rust 프로젝트 설정
Cargo.toml은 Rust 프로젝트의 의존성, 기능(feature), 빌드 설정을 정의합니다. JSON 의존성 목록이나 생성된 설정을 Cargo.toml 형식으로 직접 변환하세요.
Python 패키징(pyproject.toml)
PEP 518과 PEP 621은 pyproject.toml을 Python 프로젝트 메타데이터 파일로 표준화했습니다. 기존 JSON 패키지 메타데이터를 필요한 TOML 구조로 변환하세요.
정적 사이트 설정
Hugo, Netlify 등 정적 사이트 생성기는 TOML 설정 파일을 사용합니다. JSON 기반 설정에서 마이그레이션하거나 설정을 프로그래밍 방식으로 생성할 때 출력을 TOML로 변환하세요.
DevOps & 인프라
Terraform(특정 프로바이더), Consul, 다양한 컨테이너 런타임은 TOML 설정을 받습니다. JSON으로 내보낸 설정을 값을 다시 입력하지 않고 TOML로 변환하세요.
API 응답을 설정 파일로
REST API는 JSON을 반환합니다. 예를 들어 피처 플래그나 환경 설정처럼 해당 데이터를 TOML 설정으로 사용해야 할 때, 응답을 붙여 넣으면 유효한 TOML을 얻을 수 있습니다.
TOML 문법 학습
TOML을 처음 배우는 개발자는 익숙한 JSON 구조를 붙여 넣고 동등한 TOML 출력을 확인하며 문법을 익힐 수 있습니다.

JSON vs TOML 비교

JSON과 TOML은 표현 능력이 겹치지만 문법, 타입 지원, 사용 목적에서 차이가 있습니다. 이 표는 변환에 영향을 미치는 주요 차이점을 보여 줍니다.

항목JSONTOML
SyntaxBraces, brackets, colons, commasKey = value, [table], [[array]]
CommentsNot allowed (RFC 8259)Supported with #
Data typesstring, number, boolean, null, object, arraystring, integer, float, boolean, datetime, array, table
null supportNative (null)No null type — omit the key or use empty string
Nested objectsUnlimited nesting depthDotted keys or [table.subtable] headers
Arrays of objectsArray of objects with [][[array-of-tables]] syntax
ReadabilityModerate — bracket-heavy at depthHigh — flat key-value pairs
SpecRFC 8259 / ECMA-404TOML v1.0.0 (toml.io)

TOML 변환 시 주의 사항

TOML에는 JSON과 다른 규칙이 있어 변환 결과에 영향을 줄 수 있습니다. 다음 네 가지 문제가 가장 많은 혼란을 일으킵니다.

TOML에는 null 타입이 없음
JSON은 null을 기본 값으로 지원합니다. TOML에는 null 타입이 전혀 없습니다. 변환 시 null 값을 처리해야 합니다. 키를 완전히 생략하거나, 빈 문자열을 사용하거나, 센티넬 값을 선택합니다. 따라서 JSON → TOML → JSON으로 다시 변환하면 원래의 null 값이 재현되지 않을 수 있습니다.
혼합 타입 배열은 허용되지 않음
JSON 배열은 타입을 자유롭게 혼합할 수 있습니다: [1, "two", true]. TOML v1.0.0은 배열의 모든 요소가 같은 타입이어야 합니다. JSON에 혼합 타입 배열이 있으면 변환기는 모든 요소를 문자열로 바꾸거나 오류를 발생시킵니다. 소스 배열에 혼합 타입이 있을 경우 출력을 반드시 확인하세요.
깊이 중첩된 객체는 출력이 길어짐
JSON은 중첩 중괄호로 깊은 중첩을 간결하게 표현합니다. TOML은 점으로 연결된 키나 [table.subtable.key] 헤더를 연쇄 사용하므로 깊이 중첩된 구조는 출력이 길어질 수 있습니다. 출력은 유효하지만 원래 JSON보다 간결하지 않습니다.
키 이름 제한
TOML의 베어 키(bare key)는 ASCII 문자, 숫자, 대시, 밑줄만 포함할 수 있습니다. JSON 키는 임의의 문자열이 가능합니다. JSON 키에 공백, 점, 특수 문자가 있으면 TOML 출력에서 따옴표 처리됩니다. 대부분의 변환기가 자동으로 처리하지만, 특수 문자가 포함된 키가 있으면 출력을 확인하세요.

코드 예제

프로그래밍 방식으로 JSON을 TOML로 변환하려면 대부분의 언어에서 TOML 직렬화 라이브러리가 필요합니다. JSON 파싱은 표준 라이브러리로 가능하지만 TOML 출력은 별도의 패키지가 필요합니다.

JavaScript (Node.js)
import { stringify } from '@iarna/toml'

const json = '{"title":"My App","database":{"host":"localhost","port":5432}}'
const obj = JSON.parse(json)
const toml = stringify(obj)
console.log(toml)
// → title = "My App"
// →
// → [database]
// → host = "localhost"
// → port = 5432
Python
import json
import tomli_w  # pip install tomli_w

json_str = '{"title": "My App", "database": {"host": "localhost", "port": 5432}}'
data = json.loads(json_str)
toml_str = tomli_w.dumps(data)
print(toml_str)
# → title = "My App"
# →
# → [database]
# → host = "localhost"
# → port = 5432
Go
package main

import (
    "encoding/json"
    "fmt"
    "github.com/pelletier/go-toml/v2"
)

func main() {
    jsonStr := `{"title":"My App","database":{"host":"localhost","port":5432}}`
    var data map[string]interface{}
    json.Unmarshal([]byte(jsonStr), &data)

    tomlBytes, _ := toml.Marshal(data)
    fmt.Println(string(tomlBytes))
    // → title = 'My App'
    // →
    // → [database]
    // → host = 'localhost'
    // → port = 5432
}
CLI (yj / remarshal)
# Using yj (https://github.com/sclevine/yj)
echo '{"title":"My App","port":3000}' | yj -jt
# → title = "My App"
# → port = 3000

# Using remarshal (pip install remarshal)
echo '{"title":"My App","port":3000}' | remarshal -if json -of toml
# → title = "My App"
# → port = 3000

자주 묻는 질문

JSON to TOML 변환은 무손실인가요?
대부분의 데이터에서 그렇습니다. 문자열, 정수, 부동소수점, 불리언, 객체, 배열 모두 TOML에 직접 대응하는 타입이 있습니다. 두 가지 예외는 null(TOML에는 null 타입이 없어 생략되거나 대체됩니다)과 혼합 타입 배열(TOML은 배열 요소의 타입이 균일해야 합니다)입니다. JSON이 이 두 패턴을 사용하지 않는다면 변환은 완전히 무손실입니다.
JSON null 값은 TOML에서 어떻게 처리되나요?
TOML에는 null 타입이 없습니다. 변환기는 일반적으로 null 값이 있는 키를 출력에서 생략합니다. TOML에서 '키는 존재하지만 값이 없음'을 표현하는 방법이 없기 때문입니다. 일부 변환기는 빈 문자열을 사용하도록 선택할 수 있습니다. null 값이 데이터에서 의미를 가진다면 출력을 반드시 확인하세요.
TOML은 중첩된 JSON 객체를 표현할 수 있나요?
네. JSON 객체는 TOML 테이블이 됩니다. 예를 들어 {"database": {"host": "localhost"}}는 [database] 테이블 헤더와 그 아래 host = "localhost"로 변환됩니다. 점으로 연결된 키나 중첩 테이블 헤더를 통해 임의의 중첩 깊이를 지원합니다.
Rust와 Python이 JSON 대신 TOML을 사용하는 이유는 무엇인가요?
TOML은 주석을 지원하는데, 이는 설정 선택 사항을 문서화하는 데 필수적입니다. 또한 패키지 메타데이터의 대부분을 차지하는 평면적인 키-값 설정에서 더 깔끔한 출력을 만들어 냅니다. JSON은 주석을 금지하고 있어(RFC 8259) 사람이 편집하는 설정 형식으로 유지 관리하기 어렵습니다.
TOML은 날짜와 시간을 어떻게 처리하나요?
TOML은 기본 datetime 타입을 갖습니다: 오프셋 datetime(2024-01-15T10:30:00Z), 로컬 datetime, 로컬 date, 로컬 time. JSON에는 날짜 타입이 없어 날짜는 문자열로 저장됩니다. JSON을 TOML로 변환할 때, 날짜처럼 보이는 문자열은 변환기가 ISO 8601 패턴을 명시적으로 감지하지 않는 한 문자열로 유지됩니다.
이 도구에 비밀값과 자격 증명을 붙여 넣어도 안전한가요?
네. 변환은 JavaScript를 사용해 브라우저에서만 실행됩니다. 어떤 데이터도 서버로 전송되지 않습니다. 브라우저 개발자 도구를 열고 네트워크 탭으로 이동해 변환 중에 요청이 발생하지 않는지 직접 확인할 수 있습니다.
출력은 어떤 TOML 버전을 따르나요?
출력은 2021년 1월에 릴리스된 현재 안정 버전인 TOML v1.0.0을 따릅니다. 이 버전은 균일한 배열 타입을 요구하고, 점으로 연결된 키를 지원하며, datetime 형식을 정의합니다. 사양은 toml.io에서 관리됩니다.