JSON TOML 변환기는 JSON 객체를 읽어 페이지에 내장된 작은 작성기로 TOML 1.0 문서를 씁니다. 중첩 객체는 [table] 헤더가, 객체 배열은 반복되는 [[name]] 블록이 되고, 단순 값은 하위 테이블보다 먼저 나오며, 맨 키(bare key)로 쓸 수 없는 키는 따옴표로 감쌉니다. 문서에 든 키와 테이블 개수도 함께 알려 줍니다.
TOML은 JSON보다 두 가지가 엄격합니다. null이 없고, 루트가 테이블이어야 합니다. TOML 1.0은 타입이 섞인 배열을 허용하므로 그런 배열은 그대로 씁니다. 표현할 방법이 없는 null은 키를 빼고 경로와 함께 알림으로 보여 주므로, 결과를 pyproject.toml, Cargo.toml, 앱 설정에 붙여넣기 전에 대신 무엇을 넣을지 정할 수 있습니다.
변환은 브라우저 안에서 이루어집니다. 200,000자를 넘는 입력은 Web Worker에서 처리하고 1,000,000자를 넘으면 편집기에서 원문을 숨기되 전체를 변환합니다. 한도는 20 MiB입니다.
사용 방법
JSON 객체 붙여넣기
최상위는 객체여야 합니다. TOML 문서는 테이블이므로 루트가 배열이나 스칼라이면 거부됩니다. 샘플 메뉴에서 API 응답, 중첩 배열, 경계 사례를 불러올 수 있습니다.
결과 읽기
TOML이 바로 표시됩니다. JSON이 잘못됐거나 루트가 객체가 아니면 오류가 대신 나옵니다.
null 알림 확인
입력에 null이 있으면 몇 개를 뺐는지와 앞쪽 경로가 알림에 나옵니다. 배열의 네 번째 요소는
b[3]처럼 표시됩니다. 대신 넣을 값을 정하거나 없어도 되는지 판단하세요.배치 확인
각 테이블에서 단순 값과 인라인 배열이 먼저 오고 그다음 하위 테이블과 테이블 배열이 오므로 JSON과 순서가 다를 수 있습니다.
복사 또는 저장
TOML을 복사해 설정 파일에 넣습니다.
작동 원리
JSON이 TOML로 대응되는 방식
TOML은 문자열, 정수, 부동소수, 불리언, 날짜시간, 배열, 테이블을 구분합니다. 변환기는 JSON만 보므로 날짜시간은 문자열로 남습니다. 소수점이나 지수로 쓴 숫자는 실수 타입을 유지해 1.0은 1.0, 1e3은 1000.0이 됩니다.
한 테이블 안에서는 단순 값과 인라인 배열을 먼저, 그다음 하위 테이블과 테이블 배열을 씁니다. [table] 헤더 뒤에 쓴 키는 그 테이블 소속이 되기 때문에 문법상 필요한 순서입니다. 객체만 든 배열은 [[a.b]] 블록이 되고, 그 밖의 배열은 타입이 섞여 있어도 인라인으로 씁니다.
| JSON | TOML |
|---|---|
| 객체 | [table] 헤더, 중첩은 [a.b] |
| 객체 배열 | 반복되는 [[name]] 블록 |
| 숫자나 문자열 배열 | 인라인 배열 [1, 2] |
| 타입이 섞인 배열 | 인라인 배열 [1, "b", true] (TOML 1.0) |
| 문자열 | \n, \t, \u 이스케이프를 쓰는 기본 문자열 |
| 숫자 | JavaScript 출력 형태의 정수 또는 실수 |
| null | 키를 빼고 알림에 표시 |
| {} | 빈 [table] |
| [] | [] |
null, 키, 루트
null에 해당하는 TOML 값이 없으므로 값이 null인 키는 빼고, 배열 안의 null은 배열에서 제거하므로 뒤의 항목이 앞으로 당겨집니다. 알림에는 경로가 최대 다섯 개까지, 이후는 말줄임표로 나와서 조용히 사라지는 값이 없습니다.
TOML 문서는 테이블이므로 루트는 객체여야 합니다. 루트가 배열이면 원하는 키를 가진 객체로 감싸세요. 영문자, 숫자, _, -로만 된 키는 맨 키로 쓰고, a b나 x.y 같은 다른 키는 따옴표 키로 씁니다.
{"a":null} -> (빈 문서, 알림: a)
{"a":[1,null]} -> a = [1] (알림: a[1])
{"a":[1,"b"]} -> a = [1, "b"]
[1] -> 오류: 루트는 객체여야 함실제 예시
{"title":"demo","owner":{"name":"Ada","age":3},"servers":[{"host":"a","port":1},{"host":"b","port":2}],"tags":["x","y"],"ratio":1.5}title = "demo"
tags = ["x", "y"]
ratio = 1.5
[owner]
name = "Ada"
age = 3
[[servers]]
host = "a"
port = 1
[[servers]]
host = "b"
port = 2단순 값이 먼저 오고, 그다음 owner 테이블, 이어서 배열의 객체마다 [[servers]] 블록이 하나씩 나옵니다.
{"name":"x","note":null,"ids":[1,null,2]}name = "x"
ids = [1, 2]TOML에는 null이 없습니다. note 키는 빠지고 배열 안의 null도 제거되어 나머지 항목이 당겨집니다. 결과는 TOML 텍스트이고, 그 아래 알림에 note와 ids[1] 경로가 나옵니다.
{"mixed":[1,"two",true,{"k":3}],"servers":[{"host":"a","ports":{"http":80}},{"host":"b"}]}mixed = [1, "two", true, { k = 3 }]
[[servers]]
host = "a"
[servers.ports]
http = 80
[[servers]]
host = "b"TOML 1.0은 섞인 배열을 허용하므로 mixed는 인라인 테이블이 든 인라인 배열 하나로 남습니다. 서버마다 [[servers]] 블록이 생기고 중첩 객체는 [servers.ports]가 됩니다.
{"a":{"b":{"c":1}},"matrix":[[1,2],[3]],"script":"line1\nline2","empty":{},"list":[]}matrix = [[1, 2], [3]]
script = "line1\nline2"
list = []
[a]
[a.b]
c = 1
[empty]중첩 객체는 점으로 이어진 테이블 헤더를 쓰고, 중첩 배열은 인라인으로 남으며, 줄바꿈은 \n 이스케이프로 쓰이고, 빈 객체는 빈 테이블 헤더가 됩니다.
{"a b":1,"x.y":2,"count":1.0,"big":9007199254740993}"a b" = 1
"x.y" = 2
count = 1.0
big = 9007199254740992공백이나 점이 든 키는 따옴표로 감쌉니다. 원본의 1.0 표기는 TOML 실수 1.0으로 유지되고, 큰 수는 작성기에 닿기 전에 이미 반올림되어 있습니다.
자주 하는 실수
null인 키는 없는 키가 됩니다
"proxy": null이 든 설정은 그 키를 잃습니다. 알림이 알려 주지만, 없는 키와 명시된 값을 다르게 다루는 프로그램에는 변환 전에 빈 문자열 같은 대체 값을 직접 넣어야 합니다.배열 안의 null은 위치를 밀어 올립니다
[1, null, 2]는[1, 2]가 되어 인덱스 2였던 항목이 1번이 됩니다. 위치가 중요하면 변환 전에 null을 표지 값으로 바꾸세요.정수 값인 실수도 타입을 유지합니다
파서가 JSON 숫자에 소수점이나 지수가 있었는지 추적합니다.
1.0은1.0,1e3은1000.0으로 써서 TOML 소비자가 실수로 읽게 합니다.큰 정수는 반올림됩니다
파싱한 숫자 토큰을 JavaScript 숫자로 바꿀 때 2^53을 넘는 값이 반올림되어 9007199254740993은 9007199254740992로 나옵니다. 이런 ID는 문자열로 두세요.
키 순서가 바뀝니다
단순 값이 테이블보다 먼저 묶이므로 JSON에서 마지막이던 키가 TOML에서는 맨 앞에 올 수 있습니다.
날짜 문자열은 문자열로 남습니다
"2024-01-01T00:00:00Z"는 TOML 날짜시간이 아니라 따옴표 문자열로 쓰입니다. 소비자가 날짜시간을 기대하면 따옴표를 직접 지우세요.
자주 묻는 질문
JSON 배열이 변환되지 않는 이유는 무엇인가요?
TOML 문서의 루트는 테이블이어야 합니다. 배열을 {"items": [...]}처럼 객체로 감싸세요.
null은 어떻게 처리되나요?
TOML에는 null이 없으므로 키를 빼고, 배열 안의 null은 제거합니다. 결과 아래 알림이 개수와 앞쪽 경로를 알려 줍니다.
객체 배열은 어떻게 쓰이나요?
객체마다 반복되는 [[name]] 블록, 즉 TOML의 테이블 배열로 쓰입니다. 빈 배열은 []입니다.
숫자와 문자열이 섞인 배열도 되나요?
네. TOML 1.0은 타입이 섞인 배열을 허용하므로 인라인으로 씁니다. TOML 0.5 파서만 이를 거부합니다.
날짜는 TOML 날짜시간으로 바뀌나요?
아니요. JSON에는 날짜 타입이 없어서 날짜 문자열은 따옴표 문자열로 남습니다. 날짜시간이 필요하면 따옴표를 직접 지우세요.
어떤 TOML 버전이 만들어지나요?
TOML 1.0입니다. 이 페이지용으로 직접 만든 작성기라서 섞인 배열과 인라인 테이블을 1.0 문법이 허용하는 대로 씁니다.
문자열의 특수 문자는 어떻게 쓰이나요?
모든 문자열은 큰따옴표 기본 문자열입니다. 따옴표, 역슬래시, 줄바꿈, 탭, 제어 문자는 이스케이프되므로 여러 줄 텍스트도 \n이 든 한 줄로 나옵니다.
데이터가 업로드되나요?
아니요. 모든 처리는 브라우저 안에서 이루어집니다.
마지막 업데이트:
