TOML to JSON

Rust의 Cargo.toml, Python의 pyproject.toml, Hugo의 config.toml: 현대 설정 파일의 세계에서 TOML은 어디에나 있지만, 여전히 JSON만 읽는 도구도 많습니다. 여기에 TOML을 붙여 넣으면 보기 좋게 정렬된 JSON을 돌려받습니다. [테이블] 섹션은 중첩 객체가 되고, [[테이블 배열]] 블록은 객체 배열이 되며, 날짜는 쓴 그대로 문자열로 통과합니다. 이 파서는 TOML의 일상적인 핵심을 다루며, 실제 한계(여러 줄 값, 인라인 테이블, 점 표기 키)는 아래에 숨김없이 정리했습니다.

변환 동작 방식

  1. 1

    TOML 붙여 넣기

    입력창에 텍스트를 넣고 JSON으로 변환을 누릅니다. 한 줄 전체를 차지하는 # 주석은 자동으로 건너뜁니다.

  2. 2

    테이블은 객체가 됩니다

    `[server.database]` 헤더는 점으로 구분된 이름마다 한 단계씩 중첩된 JSON 객체가 됩니다.

  3. 3

    테이블 배열은 배열이 됩니다

    `[[users]]` 블록은 블록마다 객체 하나씩 담긴 JSON 배열을 만듭니다.

  4. 4

    스칼라 값은 타입을 유지합니다

    따옴표로 감싼 문자열, 단순 십진 정수와 소수, true/false는 JSON 기본 타입으로 변환되고, 날짜는 쓴 그대로 문자열로 남습니다.

  5. 5

    JSON 복사

    결과는 스페이스 4칸 들여쓰기로 정렬되고, 키는 원래 순서를 유지하며, 바로 복사할 수 있습니다.

타입 매핑

TOML 값 JSON 값 예시
문자열(기본 또는 리터럴) 문자열 "hello" → "hello"
정수(단순 십진) 숫자 42 → 42
소수(단순 십진) 숫자 3.14 → 3.14
불리언 불리언 true → true
배열(한 줄) 배열 [1, 2, 3] → [1, 2, 3]
키가 있는 테이블 객체 [server] + port = 8080 → "server": {"port": 8080}
테이블 배열 객체 배열 [[users]] + name = "alice" → "users": [{"name": "alice"}]
날짜/시간 문자열(쓴 그대로) 2026-04-18T10:00:00Z → "2026-04-18T10:00:00Z"

출력은 항상 스페이스 4칸 들여쓰기로 정렬되므로 배열과 객체는 여러 줄에 걸쳐 표시됩니다. 위 표는 읽기 쉽도록 값을 한 줄로 보여 준 것입니다. 키 순서는 TOML에 적힌 순서 그대로 유지됩니다.

전체 예시

title = "My App"

[server]
host = "localhost"
port = 8080

[[users]]
name = "alice"
admin = true

는 다음과 같이 변환됩니다.

{
    "title": "My App",
    "server": {
        "host": "localhost",
        "port": 8080
    },
    "users": [
        {
            "name": "alice",
            "admin": true
        }
    ]
}

지원하는 TOML과 실제 한계

지원: 점 표기 섹션 이름을 포함한 [테이블] 헤더, [[테이블 배열]], 한 줄 key = value 쌍, \n, \t, \" 이스케이프를 지원하는 기본 문자열 "...", 리터럴 문자열 '...', 단순 십진 정수와 소수, true/false, 한 줄 배열(중첩 가능), 한 줄 전체 # 주석, 문자열로 통과하는 날짜.

지원하지 않는 항목과 대처 방법:

  • 여러 줄 문자열(""" 또는 ''')과 여러 줄 배열은 파서가 오류로 멈춥니다. 값을 먼저 한 줄로 합치세요.
  • 인라인 테이블은 펼쳐지지 않습니다: point = { x = 1, y = 2 }는 객체가 아니라 문자열 "{ x = 1, y = 2 }"로 나옵니다. 별도의 [point] 섹션으로 고쳐 쓰세요. Cargo.toml의 의존성 줄 serde = { version = "1.0" }이 전형적인 사례입니다.
  • 등호 왼쪽의 점 표기 키는 평평한 키 하나로 남습니다: server.host = "a"는 중첩되지 않고 "server.host"라는 키를 만듭니다. 대신 [server] 헤더를 사용하세요. 헤더 안의 점 표기 [section.names]는 올바르게 중첩됩니다.
  • 값 뒤의 주석은 제거되지 않습니다: port = 8080 # main은 문자열 "8080 # main"이 됩니다. 주석은 별도 줄에 두세요.
  • 단순 십진을 넘는 숫자 형식은 인식되지 않습니다: 1_000, 0xFF, 5e2, +99, inf, nan은 따옴표로 감싼 문자열로 나옵니다. 1000, 255, 500, 99로 적으세요.
  • 기본 문자열의 \uXXXX 이스케이프는 디코딩되지 않습니다. 실제 문자를 직접 붙여 넣으세요.

완전한 TOML 1.0 문서라면 toml2json 같은 명령줄 변환기를 쓰거나, Python의 tomllib으로 파일을 읽어 JSON으로 내보내세요.

이런 곳에 유용합니다

  • 디버깅 중 TOML 조각을 JSON으로 빠르게 확인할 때.
  • JSON만 받는 린터, 스크립트, 인벤토리 도구에 간단한 설정 값을 전달할 때.
  • 손으로 쓰기 편한 TOML 메모에서 테스트용 JSON 픽스처를 생성할 때.
  • 작고 평평한 설정 파일 이전. Hugo의 config.toml 상당수가 여기에 해당합니다.

왕복 변환 참고 사항

  • 주석은 절대 남지 않습니다: JSON에는 주석 문법 자체가 없습니다.
  • 날짜는 문자열로 남습니다: 이후 코드에서 날짜 객체로 다시 파싱해야 합니다.
  • 큰 숫자: JSON 텍스트 안에서 정수는 64비트 값으로 유지되지만, JavaScript 소비자는 2^53을 넘으면 정밀도를 잃습니다. 나노초 타임스탬프와 숫자 ID에 주의하세요.
  • 키 순서는 이 변환기에서는 쓴 그대로 유지됩니다. 다른 JSON 도구는 문서를 다시 출력할 때 키를 재정렬할 수 있습니다.

반대 방향

JSON → TOML이 더 어려운 여정입니다. JSON에는 TOML에 없거나 다르게 다루는 구조(깊은 익명 중첩, null)가 있기 때문입니다. 왕복 시나리오 대부분은 TOML 쪽에서 손으로 다듬어야 합니다.

자주 묻는 질문

아니요. JSON에는 주석 문법이 없어서 한 줄 전체 # 주석은 그대로 건너뜁니다. 주의할 점: 값 뒤에 붙은 주석은 제거되지 않아 port = 8080 # main은 문자열 “8080 # main”이 됩니다. 변환 전에 주석을 별도 줄로 옮기세요.

아니요. 일상적인 핵심만 다룹니다. 점 표기 섹션 이름의 테이블, 테이블 배열, 한 줄 key = value 쌍, 따옴표 문자열, 단순 십진 숫자, 불리언, 한 줄 배열, 한 줄 전체 주석입니다. 여러 줄 문자열과 배열, 인라인 테이블, 점 표기 키, 1_000이나 0xFF 같은 숫자 형식은 지원하지 않습니다. 전체 사양 문서에는 toml2json이나 Python의 tomllib 같은 CLI 도구를 사용하세요.

일반적인 설정 파일은 즉시 변환됩니다. 변환은 저희 서버에서 실행되므로 아주 큰 문서는 요청 크기 제한을 받습니다. 수 메가바이트급 TOML에는 명령줄 변환기가 더 적합합니다.

네, 이 변환기는 서버에서 동작합니다. TOML은 HTTPS로 저희 서버에 전송되어 그곳에서 변환된 뒤 같은 응답으로 돌아옵니다. 내용은 이후 저장되지 않으며 익명 사용 횟수만 기록됩니다. 비밀번호나 API 키 같은 비밀 정보는 붙여 넣지 마세요.

관련 도구

이 도구는 다른 언어로도 제공됩니다