TOML ↔ JSON 변환기
TOML(Cargo.toml·pyproject.toml·Hugo config)과 JSON 변환 — 테이블·array-of-tables·인라인 테이블·타입 스칼라 처리.
사용법
- 방향 선택.
TOML → JSON은 TOML을 JSON 객체로 파싱;JSON → TOML은 역. - 소스 붙여넣기. 오류는 파싱 깨진 줄·문자 지목.
- 결과 복사. TOML 출력은 스칼라 먼저, 그다음
[table]섹션, 그다음[[array.of.tables]]블록 — 대부분 린터 기대 순서.
자세한 설명
펼치기접기
TOML과 JSON은 같은 모양의 설정 데이터를 아주 다른 문법으로 기술하고, 이 변환기는 양방향으로 오갑니다. Cargo.toml이나 pyproject.toml을 붙여 넣으면 린터나 생성기, 스크립트가 기대하는 JSON이 나오고, JSON을 넣으면 러스트와 파이썬 도구들이 실제로 배포하는 형태의 TOML이 나옵니다. 실제 파일에 등장하는 TOML의 요소들을 다룹니다. 테이블 [a.b], 테이블 배열 [[a.b]], 인라인 테이블, 인라인 배열, 기본 문자열과 리터럴 문자열, 정수, 밑줄 구분자가 든 실수, 불리언, 날짜까지 포함합니다.
변환은 대칭이 아니고, 그 비대칭의 정체는 TOML에 없는 null입니다. JSON에는 있고 TOML에는 없습니다. 그쪽의 관례는 키를 아예 생략하는 것입니다. JSON에서 TOML로 갈 때 이 도구는 키를 버리는 대신 빈 문자열을 씁니다. 그래서 구조는 살아남지만 "없음"과 "명시적으로 비어 있음"의 구분은 살아남지 못합니다. 그 차이가 여러분의 스키마에서 의미를 갖는다면, 변환 후가 아니라 변환 전에 해당 키들을 처리하세요.
날짜는 두 형식이 진짜로 어긋나는 또 다른 지점입니다. TOML에는 일급 날짜·시간 타입이 있고, 그중에는 의도적으로 오프셋을 담지 않는 로컬 날짜시간도 있습니다. JSON에는 문자열밖에 없습니다. 이 변환기는 날짜시간을 적힌 그대로 보존하는데, 게으름이 아니라 의도된 선택입니다. 날짜 객체로 파싱했다가 다시 서식화하면 그 빠져 있던 오프셋이 보는 사람의 시간대로 해석되어 버려서, 같은 pyproject.toml을 서울에서 열 때와 리스본에서 열 때 서로 다른 JSON 문서가 나오게 됩니다. 텍스트를 그대로 두면 들어온 값이 그곳에 있던 값 그대로입니다.
작은 메모 둘. TOML의 정수는 명세상 64비트 부호 있는 정수인데 JSON의 수는 대부분의 파서에서 배정도 실수입니다. 그래서 2의 53승을 넘는 값은 자바스크립트에서 왕복을 온전히 견디지 못합니다. 빌드 번호나 스노플레이크 ID가 흔한 희생자입니다. 그리고 a.b = 1과 [a] 아래의 b = 1은 TOML에서 정확히 같은 뜻이므로, 겉보기에 전혀 닮지 않은 두 파일이 동일한 JSON으로 변환될 수 있습니다. diff가 진짜 변경을 찾아냈다고 결론 내리기 전에 기억해 둘 만합니다.
자주 묻는 질문
TOML 전체 스펙 커버?
테이블·점 키·인라인 테이블·인라인 배열·멀티라인 배열·기본 문자열·멀티라인 기본 문자열·리터럴 문자열·_ 구분자 정수·부동소수·불리언·RFC 3339 datetime·array-of-tables 처리. 덜 흔한 기능(오프셋 datetime 산술·이스케이프 시퀀스 엣지 케이스·매우 깊게 중첩된 혼합 값)은 왕복하지만 손 편집 필요 가능.
JSON → TOML이 왜 키 재정렬?
TOML은 섹션 내 모든 [table] 블록 전에 스칼라 와야 함 — [table] 열리면 다음 키 세트가 그것에 속하기 때문. 시리얼라이저는 스칼라 먼저 재정렬 → 출력이 다시 올바르게 파싱 → 최상위 필드 의미 변경 없음.
텍스트로 쓰려던 값이 날짜나 숫자로 돌아오는 이유는?
TOML은 따옴표 없는 값의 타입을 생김새로 정하기 때문이다. 따옴표 없는 2026-03-15는 날짜이고, 1.20은 1.2로 찍히는 실수이며, 0x1F는 정수다. 글자 그대로가 중요한 값 — 버전, 전화번호, 앞자리 0이 있는 식별자 — 은 따옴표로 묶어야 한다. YAML이 놓는 함정과 같지만, 뒤에 더 엄격하고 잘 규정된 규칙이 있다는 점이 다르다.
객체 배열은 TOML에서 어떤 모양이 되나?
이중 대괄호 머리글을 반복해서 쓰는 테이블 배열이 된다. 대괄호로 묶은 목록이 아니다. 결과는 장황하지만 읽기 쉬운데, TOML이 전반적으로 택한 교환이 그것이다. 그래서 JSON을 거쳐 왕복하면 원래 배치가 보존되지 않는다. 주석은 사라지고, 인라인 테이블은 펼쳐져 돌아올 수 있으며, 키 순서는 내가 쓴 대로가 아니라 문서 구조를 따른다.
관련 도구
JSON ↔ YAML 변환기
JSON ↔ YAML 양방향 변환 — 들여쓰기 선택, 결과 복사.
변환
XML ↔ JSON 컨버터
XML → JSON·JSON → XML 양방향, 전체 속성 지원, 구성 가능 속성 프리픽스·텍스트 키. 브라우저 네이티브 DOMParser가 네임스페이스·CDATA·코멘트 처리.
변환
INI ↔ JSON 변환
INI 스타일 설정 파일 ↔ JSON 왕복 변환 — 섹션·점 표기 중첩·주석·값 타입 추론 지원.
변환
고정폭 텍스트 → CSV / JSON 파서
고정폭/고정 열 텍스트를 열 너비로 잘라 필드로 나누고 CSV 또는 JSON으로 내보냅니다. 브라우저에서 동작합니다.
변환
CSV → HTML / Markdown / JSON 테이블
CSV를 HTML <table>·마크다운 테이블·JSON 객체 배열로 변환 — 구분자 자동 감지.
변환
JSON → SQL INSERT 생성기
JSON 객체 배열을 INSERT 문으로 — PostgreSQL·MySQL·SQLite·ANSI 인용, 선택적 ON CONFLICT upsert.
변환