JSON을 TOML로 변환
JSON 객체를 TOML v1.0 설정 파일로 빠르게 바꿔 주는 무료 온라인 도구입니다. 중첩 테이블([section]), 하위 테이블([a.b]), 테이블 배열([[items]])을 자동으로 생성해 Cargo.toml이나 pyproject.toml 초안을 만들기 좋고, 모든 변환은 브라우저 안에서 로컬로 처리됩니다.
관련 추천
TOML이란 무엇인가요? JSON을 TOML로 변환하는 이유는 무엇인가요?
TOML의 풀네임은 Tom's Obvious, Minimal Language이며, GitHub 공동 창립자인 Tom Preston-Werner가 2013년에 발표한 설정 파일 형식입니다. 설계 목표는 구문이 분명하고(obvious), 최소한이며(minimal), 사람이 읽기 쉽고, 명확하고 모호하지 않은 것입니다. TOML 1.0은 2021년에 안정 버전이 되었으며(toml-lang/toml), 현재 Rust 생태계의 Cargo, Python PEP 621(pyproject.toml), Hugo, Prettier, Deno, Taplo 등 많은 도구의 기본 설정 형식이 되었습니다.
TOML은 설정 파일 시나리오에서 JSON 및 YAML과 비교하여 몇 가지 명확한 장점이 있습니다. ①YAML의 들여쓰기 함정이 없음 - YAML은 들여쓰기로 계층을 표현하며, 들여쓰기 오류로 설정 의미가 완전히 변경될 수 있습니다(예: list가 string으로 변환). TOML은 [table]로 계층을 명시적으로 선언하므로 모호성이 없습니다. ②JSON보다 설정에 더 적합 - JSON의 따옴표와 중괄호는 복잡한 설정에서 매우 장황하며, TOML의 key = value 작성 방식은 더 깔끔하고 주석이 기본으로 지원됩니다. ③타입 시스템이 명확함 - TOML은 integer/float/string/boolean/datetime/array/table의 7가지 타입을 구분하여, JSON의 "숫자가 정수인지 부동소수인지"와 같은 모호성이 없으며 YAML 1.1의 Norway 문제(NO가 boolean false로 파싱됨)도 없습니다.
TOML의 핵심 구조는 네 가지 요소로 구성됩니다. ①키-값 쌍(key = value): 기본 설정 항목을 나타냅니다. ②테이블(Table): [name]으로 명명된 그룹을 나타내며 중첩([a.b.c])을 지원합니다. ③테이블 배열(Array of Tables): [[name]]으로 동일 구조 객체의 목록을 나타내며, 다중 환경 설정, 플러그인 목록, 의존성 목록에 자주 사용됩니다. ④배열(Array): 기본 타입 인라인([1, 2, 3]) 및 여러 줄의 두 가지 작성 방식을 지원합니다. 본 도구는 변환 시 JSON 구조를 지능적으로 인식하여 가장 적합한 TOML 구문을 자동으로 선택합니다.
JSON을 TOML로 변환하는 일반적인 동기는 몇 가지가 있습니다. ①프로젝트가 Node.js 생태계에서 Rust/Python 생태계로 마이그레이션하면서 설정 형식을 TOML로 통일해야 하는 경우. ②팀이 흩어진 JSON 설정을 TOML로 통일하여 관리하기로 결정하고, TOML의 [section] 계층을 활용하여 JSON의 깊은 중첩으로 인한 가독성 부담을 해소하는 경우. ③TOML로 YAML을 대체하여 들여쓰기로 인한 이상한 버그를 제거하는 경우. ④CI/CD에서 업스트림에서下发된 JSON 메타데이터를 TOML로 변환하여 다운스트림 도구에 주입하는 경우. 본 도구는 이러한 모든 시나리오의 변환 요구 사항을 포괄합니다.
변환 과정은 본질적으로 구문 트리 매핑입니다. JSON.parse()가 텍스트를 JavaScript 객체(AST)로 파싱한 다음 각 노드를 재귀적으로 순회합니다 - 문자열, 숫자, 불리언, null은 해당 TOML 스칼라로 매핑됩니다. 배열은 요소 타입에 따라 인라인 배열 또는 테이블 배열로 구분됩니다. 중첩 객체는 테이블 또는 하위 테이블로 매핑됩니다. 마지막으로 TOML 규격에 따라 텍스트를 출력합니다. 이러한 구조화된 매핑은 변환 결과가 구문상 100% 합법적임을 보장하며 형식 오류가 발생하지 않습니다.
사용 사례
- Rust 프로젝트에서 Cargo.toml 초안을 빠르게 만들고 싶을 때
- Python 프로젝트용 pyproject.toml 설정을 정리할 때
- Hugo, Deno, Prettier 설정을 JSON에서 TOML로 옮길 때
- CI/CD 또는 DevOps 설정 형식을 팀 차원에서 TOML로 통일할 때
- 기존 JSON 설정을 TOML과 비교해 어떤 형식이 더 읽기 좋은지 검토할 때
- TOML의 중첩 테이블과 테이블 배열 표현을 예제로 학습하고 싶을 때
이용 방법
- 왼쪽 편집기에 JSON을 붙여 넣거나 .json / .txt 파일을 불러옵니다. 필요하면 예제 데이터를 바로 열 수 있습니다
- 도구가 JSON을 파싱해 오른쪽에 TOML v1.0 형식의 설정 코드를 실시간으로 생성합니다
- 구문 오류가 보이면 오류 메시지를 확인하고, 필요하면 JSON 복구 도구에서 정리한 뒤 다시 변환합니다
- 완성된 결과를 복사하거나 config.toml 파일로 다운로드해 프로젝트에 적용합니다
주요 기능
- TOML v1.0 규격에 맞는 출력을 제공해 Cargo, Poetry, Hugo, Prettier 같은 TOML 지원 도구에서 바로 사용할 수 있습니다
- 다단계 JSON 객체를 [a], [a.b.c] 형태의 TOML 테이블로 자동 정리해 구조를 읽기 쉽게 유지합니다
- 객체 배열은 [[items]] 형식의 테이블 배열로 변환되어 여러 설정 항목이나 환경 목록 표현에 적합합니다
- 큰따옴표, 백슬래시, 줄바꿈, 탭 같은 특수 문자를 TOML 규칙에 맞춰 안전하게 이스케이프합니다
- 문자열, 숫자, 불리언, null 값을 적절한 TOML 타입으로 매핑하며 null은 빈 문자열 ""로 처리합니다
- 왼쪽에 JSON을 붙여 넣으면 오른쪽에 TOML 결과가 즉시 생성되어 별도 실행 버튼이 필요 없습니다
- 중첩 객체, 배열, 테이블 배열을 포함한 예제를 한 번에 불러와 변환 결과를 빠르게 확인할 수 있습니다
- .json / .txt 파일을 불러오고 변환 결과를 config.toml 파일로 저장할 수 있습니다
- PC 환경에서는 좌우 패널 너비를 드래그로 조절할 수 있고 최근 200개 기록도 자동 저장됩니다
- 변환 후 JSON 포맷터로 이동해 원본 JSON을 정리하거나 검증하는 작업을 이어서 할 수 있습니다
- 모든 처리는 브라우저 JavaScript에서 로컬로 수행되어 민감한 설정이 서버로 전송되지 않습니다
자주 묻는 질문
JSON을 TOML 설정 파일로 어떻게 변환하나요?
JSON 내용을 왼쪽 입력 상자에 붙여넣으면 도구가 JSON 객체를 자동으로 파싱하여 TOML v1.0 규격에 따라 설정 파일 형식으로 변환합니다. 키-값 쌍은 key = value로, 중첩 객체는 TOML 테이블([section])과 하위 테이블([a.b])로 변환되며, 배열은 내용에 따라 자동으로 인라인 배열 또는 테이블 배열([[items]])로 구분됩니다. 예제 버튼을 클릭하면 중첩 예제를 불러와 효과를 확인할 수 있으며, 변환 결과는 프로젝트 설정에 사용할 수 있도록 config.toml 파일로 직접 다운로드할 수 있습니다.
TOML, YAML, JSON은 각각 어떤 상황에 적합한가요?
JSON은 API 데이터 교환과 프런트엔드-백엔드 데이터 전송에 적합하며 REST 인터페이스의 사실상 표준입니다. YAML은 복잡한 데이터 구조와 CI/CD 설정(GitHub Actions, Ansible, Kubernetes)에 적합하며, 가독성이 높고 주석 및 다중 문서를 지원합니다. TOML은 명확한 설정 파일 시나리오(Rust/Cargo, Python pyproject, Hugo, Prettier)에 적합하며, 구문이 간결하고 모호성이 적으며 들여쓰기 함정이 없습니다. 세 가지 모두 절대적인 우열이 없으며 핵심은 상황에 맞는 선택입니다. 설정 파일에는 TOML, CI/CD 설정에는 YAML, API 데이터에는 JSON을 권장합니다.
중첩된 JSON 객체는 TOML에서 어떻게 표현되나요?
TOML은 테이블(Table)을 사용하여 중첩 구조를 표현합니다. 1단계 중첩 예: {"database": {"host": "localhost"}} → [database] host = "localhost"로 변환됩니다. 다단계 중첩 예: {"server": {"ssl": {"enabled": true}}} → [server.ssl] enabled = true로 변환됩니다. 본 도구는 중첩 계층을 자동으로 인식하여 해당 테이블 헤더 경로를 생성하므로 수동으로 조정할 필요가 없습니다.
JSON 배열은 TOML에서 어떻게 변환되나요?
TOML은 두 가지 배열 구문을 구분합니다. ①기본 타입 배열(예: ["a", "b", 1, 2])은 인라인 배열 key = ["a", "b", 1, 2]로 변환되며, 대괄호로 감싸고 쉼표로 구분합니다. ②객체 배열(예: [{"name": "primary"}, {"name": "replica"}])은 테이블 배열 [[items]]로 변환되며, 각 객체 앞에 [[items]] 헤더가 추가되고 필드는 그 아래에 평탄하게 배치됩니다. 본 도구는 배열 타입을 자동으로 판단하여 가장 적합한 TOML 구문을 선택합니다.
생성된 TOML을 Cargo.toml에 바로 사용할 수 있나요?
네, 가능합니다. 본 도구는 TOML v1.0 공식 규격(github.com/toml-lang/toml)을 엄격히 준수하며, 출력된 TOML은 Cargo(Rust 패키지 관리), Poetry/pyproject(Python 패키지 관리), Hugo(정적 사이트), Prettier, Deno, Taplo 등 TOML 형식을 지원하는 모든 도구에서 바로 사용할 수 있습니다. 참고: Cargo.toml의 특정 [package] / [dependencies] 섹션이 필요한 경우 Cargo 규격에 따라 해당 필드(name, version, edition, crate 의존성 테이블 등)를 추가해 주세요.
JSON의 null 값은 무엇으로 변환되나요?
TOML에는 null 타입이 없으므로 JSON의 null은 빈 문자열 ""로 변환됩니다(가장 일반적인 등가 표현). TOML 소비자가 null 필드에 대해 특별한 요구 사항이 있는 경우(예: [dependencies]의 특정 crate의 optional 필드), 변환 후 해당 줄을 수동으로 조정해 주세요.
문자열 안의 큰따옴표와 줄바꿈은 어떻게 처리되나요?
TOML 문자열은 반드시 큰따옴표로 감싸야 하며, 내부의 큰따옴표, 백슬래시, 줄바꿈(\n), 캐리지 리턴(\r), 탭(\t)은 모두 TOML 규칙에 따라 이스케이프해야 합니다. 본 도구는 이러한 이스케이프를 자동으로 처리합니다. 예를 들어 JSON의 He said "Hello"는 TOML로 변환 후 He said \"Hello\"가 되고, 여러 줄 문자열의 줄바꿈은 \n으로 변환됩니다. 수동 이스케이프가 필요 없으며 도구 출력은 TOML 파서에서 바로 올바르게 읽을 수 있습니다.
생성된 TOML은 날짜/시간 타입을 지원하나요?
본 도구의 입력은 JSON 텍스트만 지원하며, JSON 표준에는 네이티브 날짜/시간 타입이 없습니다(일반적인 방법은 ISO 8601 문자열 사용, 예: "2026-01-01T00:00:00Z"). 변환 후 TOML은 이러한 값을 문자열로 그대로 유지합니다(key = "2026-01-01T00:00:00Z"). TOML 네이티브 local datetime/offset datetime 타입이 필요한 경우, 문자열을 일반 TOML 날짜 리터럴(예: 2026-01-01T00:00:00)로 수동 변경해 주세요.
로컬 브라우저에서 변환 시 설정 데이터가 업로드되나요?
아니요, 업로드되지 않습니다. 모든 JSON 파싱, TOML 생성, 문자열 이스케이프는 브라우저의 로컬 JavaScript 엔진에서 완료되며 네트워크를 통해 어떤 서버로도 전송되지 않습니다. 인터넷이 연결되지 않은 상태에서도 정상적으로 사용할 수 있습니다. 데이터베이스 비밀번호, API 키, 내부 네트워크 주소 등 민감한 설정 정보가 포함된 JSON도 안심하고 변환할 수 있습니다.
문제 해결
JSON에서 "Unexpected token" 오류가 발생하면 어떻게 해결하나요?
이는 JSON 구문 오류입니다. 일반적인 원인: ①끝에 불필요한 쉼표(trailing comma), 예: {"a":1,}. ②작은따옴표로 문자열을 감싼 경우, 예: {'a':1}(JSON은 큰따옴표 필수). ③키 이름에 큰따옴표가 없는 경우, 예: {a:1}. ④주석 // 또는 /* */ (JSON 표준은 지원하지 않음). 本站의 JSON 수정 도구를 사용하여 이러한 일반적인 오류를 한 번에 자동 수정한 다음 본 도구에 붙여넣어 변환할 수 있습니다.
변환된 TOML이 Cargo에서 "invalid TOML" 오류를 발생시키나요?
일반적으로 필드 이름 충돌 또는 필수 필드 누락이 원인입니다. TOML 파서는 테이블 헤더 경로, 키 이름 중복, 문자 이스케이프에 매우 엄격합니다. 다음을 확인하세요. ①동일한 스코프 내에 중복된 키 이름이 있는지. ②문자열 내의 특수 문자가 올바르게 이스케이프되었는지(큰따옴표, 백슬래시, 줄바꿈). ③중첩 계층이 너무 깊지 않은지(TOML 1.0은 5단계 이하 권장). ④[package] 등 Cargo 필수 섹션이 누락되었는지. 본 도구가 출력하는 구문은 100% 합법적이며, 문제는 일반적으로 사용처(예: 필드 이름이 Cargo 규격을 충족하는지)에 있습니다.
객체 배열이 테이블 배열이 아닌 인라인 배열로 변환되었나요?
JSON 배열은 모든 요소가 기본 타입(문자열/숫자/불리언/null)인 경우에만 인라인 배열 ["a","b"]로 변환되며, 객체 배열(예: [{"name":"x"}])은 테이블 배열 [[items]]로 변환됩니다. 객체 배열이 잘못 인라인 배열로 인식되었다면 배열에 객체가 아닌 요소가 혼합되어 있다는 의미입니다. 데이터를 확인하세요. ①배열에 문자열이나 숫자가 혼합되어 있는지. ②중첩 계층이 깨졌는지.
일부 키 이름이 변환 후 따옴표로 묶여 있는데, 어떻게 제거하나요?
TOML은 키 이름에 문자, 숫자, 밑줄, 하이픈([A-Za-z0-9_-])만 포함할 수 있다고 규정합니다. JSON 키 이름에 특수 문자(예: 공백, 점, 중국어, 이모지, 예약어)가 포함된 경우, 도구는 TOML의 합법성을 보장하기 위해 자동으로 큰따옴표로 묶습니다. 예: {"my key": 1} → "my key" = 1. 다운스트림 도구가 따옴표로 묶인 키 이름을 허용하지 않는 경우, JSON 키 이름을 합법적인 문자(A-Z a-z 0-9 _ -)로 수동 변경한 후 변환해 주세요.
대용량 파일 변환 시 브라우저가 느려지면 어떻게 하나요?
도구는 실시간 변환 최적화(입력 즉시 변환)를 적용했지만, 매우 큰 파일(>1MB, 수십만 줄)은 여전히 부담이 될 수 있습니다. 권장 사항: ①먼저 JSON 포맷 도구로 JSON이 합법적인지 확인. ②일괄 변환(예: 최상위 키별로 분할). ③브라우저에 충분한 메모리가 있는지 확인. ④매우 큰 설정 파일(10MB+)은 taplo, tomlq 등 명령줄 도구를 사용하여 처리하는 것을 권장합니다. 본 도구는 일상적인 설정 시나리오(KB ~ 수백 KB 수준)를 대상으로 설계되었습니다.
용어집
- TOML
- Tom's Obvious, Minimal Language의 약자로, 설정 파일을 위해 설계된 형식 언어입니다. 구문이 간결하고 모호성이 없으며, Rust Cargo / Python pyproject / Hugo의 기본 설정 형식입니다.
- Table(테이블)
- TOML에서 [name]으로 선언된 명명된 그룹으로, JSON의 객체에 해당하며 [server.ssl]과 같이 점으로 중첩을 지원합니다.
- Array of Tables(테이블 배열)
- TOML에서 [[name]]으로 선언된 동일 구조 객체의 목록이며, 각 [[name]] 섹션은 객체의 모든 필드를 포함합니다. JSON의 객체 배열에 해당합니다.
- Inline Table(인라인 테이블)
- TOML 1.0에서 지원하는 구문으로, { key = value, key = value }를 사용하여 한 줄에 간단한 객체를 선언합니다. 명명이 필요하지 않은 평탄한 객체에 적합합니다.
- Cargo.toml
- Rust 프로젝트의 표준 설정 파일로, package 메타데이터, dependencies, dev-dependencies, features 등을 정의하며 TOML 형식입니다.
- pyproject.toml
- Python 프로젝트의 표준 설정 파일(PEP 621)로, build-system, project 메타데이터, dependencies, tool 설정(black/pytest/mypy 등)을 정의합니다.
- TOML v1.0
- TOML 1.0은 2021년에 공식 발표된 안정 버전이며, 본 도구는 이 규격을 엄격히 준수합니다(github.com/toml-lang/toml/blob/main/toml.md).
- JSON 중첩 객체
- JSON에서 다른 객체를 포함하는 객체로, TOML의 테이블([section]) 또는 하위 테이블([a.b.c])에 해당합니다.
- TOML 이스케이프
- TOML 문자열 내의 큰따옴표, 백슬래시, 줄바꿈 등 특수 문자는 백슬래시로 이스케이프해야 합니다(\", \, \n). 본 도구는 자동으로 처리합니다.
- 설정 파일(Config File)
- 애플리케이션 시작 시 읽어들이는 설정 파일로, 코드와 분리되어 있어 수정이 용이합니다. TOML은 설정 파일의 사실상 표준 중 하나입니다.
JSON 타입과 TOML 타입 매핑 표
본 도구는 다음 규칙에 따라 JSON 타입을 TOML 타입으로 변환합니다:
| JSON 타입 | TOML 타입 | TOML 작성법 | 설명 |
|---|---|---|---|
| string | string | key = "value" | TOML 문자열은 반드시 큰따옴표로 감싸야 함 |
| integer | integer | key = 8080 | 정수는 소수점 없음 |
| float | float | key = 3.14 | 부동소수점은 반드시 소수점 필요 |
| boolean | boolean | key = true | TOML은 소문자 true / false만 사용 |
| null | string(빈 문자열) | key = "" | TOML에는 null 타입이 없어 빈 문자열로 변환됨 |
| array[primitive] | array | key = ["a", "b"] | 기본 타입 배열은 인라인 대괄호 사용 |
| array[object] | array of tables | [[items]]
key = value | 객체 배열은 [[name]] 테이블 배열 사용 |
| object | table | [name]
key = value | 객체는 [name] 테이블로 선언 |
TOML 문자열 이스케이프 대응 표
TOML 문자열 내에서 반드시 이스케이프해야 하는 특수 문자:
| 원본 문자 | TOML 이스케이프 후 | 이름 | 예시 시나리오 |
|---|---|---|---|
" | \" | 큰따옴표 | 문자열 내 큰따옴표 중첩 |
\ | \\ | 백슬래시 | Windows 경로 C:\Users |
줄바꿈 | \n | Newline | 여러 줄 문자열 압축 |
탭 | \t | Tab | 탭 문자 필드 |
캐리지 리턴 | \r | Carriage Return | Windows 줄바꿈 CRLF |
\b | \b | Backspace | 백스페이스 문자 |
\f | \f | Form Feed | 폼 피드 문자 |
U+0000 | \u0000 | 유니코드 0 | 제어 문자는 반드시 \u로 이스케이프해야 함 |
JSON을 TOML로 변환 예제 대응
복잡한 구조의 JSON 입력에 대응하는 TOML 출력:
| 구조 | 예시 |
|---|---|
| JSON 입력 | { "name": "app", "port": 8080 } |
| TOML 출력 | name = "app"
port = 8080 |
| JSON 입력 | { "server": { "host": "0.0.0.0", "port": 443 } } |
| TOML 출력 | [server]
host = "0.0.0.0"
port = 443 |
| JSON 입력 | { "hosts": [{"ip":"10.0.0.1"},{"ip":"10.0.0.2"}] } |
| TOML 출력 | [[hosts]]
ip = "10.0.0.1"
[[hosts]]
ip = "10.0.0.2" |
Privacy & Security
이 도구의 JSON 파싱, TOML 생성, 문자열 이스케이프, 파일 읽기 작업은 모두 브라우저 안의 JavaScript에서 로컬로 처리됩니다. 입력한 JSON과 생성된 TOML은 서버로 전송되거나 기록·분석되지 않습니다. 데이터베이스 비밀번호, API 키, 내부 주소 같은 민감한 설정도 비교적 안심하고 변환할 수 있습니다. 로컬 기록은 사용자의 브라우저 localStorage에만 저장되며 캐시를 지우면 삭제됩니다.
Authoritative References
- toml-langTOML 공식 규격 v1.0
- GitHubTOML GitHub 저장소
- WikipediaTOML - 위키백과
- Rust 공식Cargo.toml 필드 참조
- JSON 압축
- CSV 를 JSON으로
- JSON을 CSV로
- JSON Diff
- JSON Escape / Unescape
- JSON 평탄화
- JSON 포맷터
- JSON 생성기
- JSONPath 온라인 쿼리
- JSON 병합
- JSON 복구
- JSON 스키마 검증기
- JSON 정렬
- JSON Stringify
- JSON을 HTML로 변환
- JSON을 Java로
- JSON을 Markdown으로
- JSON을 SQL로 변환
- JSON을 TOML로 변환
- JSON을 TypeScript로 변환
- XML을 JSON으로
- JSON을 XML로 변환
- YAML을 JSON으로 변환
- JSON → YAML 변환
- JSON을 Go로
- JSON을 Rust로
- JSON → Swift
- JSON에서 C#로
- JSON을 C++로
- JSON을 PHP로
- JSON을 Python으로