TOML → JSON 변환기

왼쪽에 TOML을 붙여넣으면 오른쪽에 JSON으로 변환돼요. 테이블은 객체로, 테이블 배열은 배열로 변환됩니다. 모든 처리는 브라우저 안에서 진행되며 업로드가 없어요.

  1. 왼쪽 텍스트 영역에 TOML을 붙여넣어 주세요.
  2. "JSON으로 변환" 버튼을 누르면 테이블 중첩이 그대로 보존된 JSON 객체가 만들어져요.
  3. 결과를 복사하거나 data.json 파일로 저장할 수 있어요.
  4. 날짜 값은 ISO 8601 문자열로, 숫자의 밑줄 구분자는 제거되어 변환됩니다.
어떤 도구인가요?

TOML 1.0 문서를 JSON 객체로 파싱합니다. `[section]` 테이블은 중첩된 객체가 되고, `[[items]]` 테이블 배열은 JSON 배열이 돼요. 문자열, 정수(16진수/8진수/2진수 리터럴 및 자릿수 구분 밑줄 포함), 부동소수, 부울, 날짜, 날짜시간, 시간 모두 JSON에 대응되는 표현으로 변환됩니다. 인라인 테이블과 인라인 배열도 같은 방식으로 평탄화돼요.

예시

TOML 입력:

name = "Ada"
active = true

[address]
city = "London"

JSON 출력:

{
  "name": "Ada",
  "active": true,
  "address": {
    "city": "London"
  }
}

자주 만나는 TOML 오류와 해결 방법

TOML은 일부 규칙이 YAML이나 JSON보다 엄격해요. 파서가 거부할 때 살펴봐야 할 패턴들입니다.

  • 따옴표 없는 문자열. `name = Ada` 는 잘못됐어요 — 따옴표 없는 값은 키/부울/숫자로 해석되지 문자열이 되지 않습니다. 큰따옴표를 사용하세요: `name = "Ada"`.
  • 혼합 타입 배열 (TOML 0.x). TOML 0.5 까지는 배열 내 혼합 타입을 금지했지만 TOML 1.0 부터 허용해요. @iarna/toml은 1.0 을 따르므로 `[1, "two"]` 가 유효합니다. 0.5 도구를 거쳐야 하는 TOML이라면 배열의 타입을 통일하세요.
  • 테이블 재정의. `[a]` 를 두 번 정의하는 건 오류예요. 같은 테이블 헤더는 최대 한 번만 등장해야 합니다. 키들을 단일 `[a]` 블록으로 합쳐 주세요.
  • 시간대 없는 날짜시간. `d = 2026-04-26T12:00:00` (Z나 오프셋 없음) 은 "지역 날짜시간" 으로 파싱되지만 JSON에는 지역성 개념이 없어요. 출력은 같은 문자열(벽시계 시간)이며 UTC 인스턴트가 아닙니다. UTC 가 필요하면 `Z` 를 붙이세요: `d = 2026-04-26T12:00:00Z`.
  • 트리플 쿼트 이스케이프 혼동. TOML 의 기본 다중 행 문자열은 `"""..."""` 로 이스케이프를 처리하지만, 리터럴 다중 행 문자열은 `\'\'\'...\'\'\'` 로 처리하지 않아요. 이스케이프 규칙을 섞으면 가장 흔한 다중 행 문자열 오류가 발생합니다.
  • 인라인 테이블 확장. 인라인 테이블 `point = {x=1, y=2}` 은 닫혀 있고 자기 완결적이라, 나중에 `[point.z]` 나 `point.z = 3` 로 확장할 수 없어요. 확장이 필요하면 처음부터 표준 `[point]` 블록 문법을 사용하세요.
자주 묻는 질문

날짜시간은 JSON에서 어떻게 표현되나요?

JSON에는 네이티브 날짜시간 타입이 없어서 ISO 8601 문자열이 됩니다. 오프셋 날짜시간(`2026-04-26T12:00:00Z`)과 지역 날짜시간(`2026-04-26T12:00:00`) 모두 문자열로 직렬화되지만 JSON에서 모호하지 않은 건 오프셋 형식뿐이에요.

정수의 밑줄 구분자는 보존되나요?

아니요 — TOML은 가독성을 위해 `1_000_000` 같은 표기를 허용하지만, 파서가 밑줄을 제거하므로 JSON 값은 `1000000` 이 됩니다. 자릿수 구분은 TOML 소스 텍스트에서만 의미가 있어요.

TOML 주석은 어떻게 되나요?

제거됩니다. TOML 주석은 `#` 로 시작하지만 JSON에는 주석 문법이 없어서 파서가 폐기해요. 주석 보존이 필요하면 다른 중간 형식을 사용해야 합니다.

테이블 배열도 지원되나요?

네. 여러 번 반복되는 `[[products]]` 블록은 `products` 키 아래의 JSON 배열이 돼요. 각 `[[products]]` 헤더가 새 배열 항목을 시작하고, 이후 키-값 라인이 그 항목을 채웁니다.

아주 큰 TOML 파일도 변환되나요?

약 30 MB 까지는 무리 없이 동작해요. 그 이후로는 텍스트 영역이 느려져요. 대부분의 설정 파일은 1 MB 미만이라 실무에서는 거의 발생하지 않는 케이스입니다.

TOML이 어디론가 업로드되나요?

아니요. 모든 처리는 브라우저 안에서 진행돼요. 변환 버튼을 눌러도 어떤 서버에도 데이터가 전송되지 않습니다.