Command Palette

Search for a command to run...

JSON을 TOML로: 구성 파일을 올바른 방법으로 변환합니다

JSON을 TOML로: 구성 파일을 올바른 방법으로 변환합니다

T
Toolz Team
|Sep 13, 2026|17 최소 읽기
Google 에서 Toolz.dev 를 선호합니다

데이터 도구 컬렉션의 일부입니다

JSON을 TOML 변환기로

JSON 을 TOML 1,0 으로 변환합니다. 객체는 테이블이 되고,객체 배열은 테이블 배열이 되며,모든 것이 TOML 이 예상하는 인라인으로 렌더링됩니다.

JSON을 TOML 변환기로를 사용하십시오

TOML 이 나를 처음 물었을 때,그것은 구문이 아니었습니다. 그것은 주문이었습니다. 나는 오래된 Node 서비스에서 JSON 설정 객체를 가지고 있었고,나는 그것을 a 로 원했습니다 config.toml 러스트를 위해 다시 작성,그리고 난 모두가 처음하는 일을했다: 나는 손으로 테이블을 입력. 십분 후 파서는 완벽하게 잘 보이는 라인을 가리키는 내가 이해하지 못하는 오류를 던지고 있었다. 문제는 아래 앉아 세 개의 키 a [table] 그 위에 속한 헤더. TOML에는 JSON이 하지 않는 규칙이 있으며, 일단 트립하면 결코 잊지 않습니다.

나는 짓는다 Toolz.dev그리고,그리고 나는 거기에 포맷 변환기의 긴 선반을 발송했다,그래서 나는 실수의 그 전체 범주를 제거하기 위해 TOML 변환기에 JSON 을 썼다. 당신은 JSON 을 붙여 넣기,당신은 동일한 데이터에 다시 구문 분석 TOML 을 얻을,주문은 당신을 위해 처리됩니다. 이 가이드는 내가 그날 오후에 읽었 으면 좋았을 것입니다: TOML 이 무엇인지,JSON 과 TOML 이 동의하지 않는 곳,그리고 당신이 신경을 쓰지 않고 그들 사이를 변환하는 방법.

TL;DR: TOML 은 Cargo,Poetry, Hugo 및 많은 Rust and Go 툴링에서 사용하는 유형 구성 형식입니다. JSON 을 TOML 로 변환하는 것은 대부분 기계적이지만 세 가지 판단이 필요합니다: 테이블 순서 (하위 테이블 앞의 키,항상), 객체 배열 작성 방법 (테이블 배열 대 인라인 테이블), JSON 에 어떤 일이 발생합니까 null는,어떤 TOML 은 표현할 방법이 없습니다. The JSON 에서 TOML 변환기 세 가지를 모두 명시적으로 만들고 브라우저에서 완전히 실행됩니다.

TOML이란 무엇이며 JSON을 TOML로 변환하는 이유는 무엇입니까?

TOML 은 Tom's Obvious,Minimal Language 의 약자입니다. 오래된 INI 파일처럼 읽히지만 INI 와는 달리 입력된 값,일류 날짜 및 정의된 문법을 가진 실제 사양을 가지고 있습니다. 그 사양이 승리한 이유입니다: 사람이 한눈에 읽을 수 있는 구성 형식,기계가 매번 같은 방식으로 구문 분석하는지 여부에 대한 모호함 없이 port = 8080 는 문자열 또는 숫자입니다. 숫자입니다. 왜냐하면 TOML 이 그렇게 말하기 때문입니다.

기계가 JSON 을 주었고 도구가 TOML 을 원할 때 JSON 에서 TOML 로 변환하기 위해 도달합니다. 그것은 생각보다 더 많이 발생합니다. API 는 설정 blob 을 JSON 으로 반환하고 당신은 그것을 필요로합니다 pyproject.toml. 당신은 오래된 config.json 그리고 프로젝트를 읽는 스택으로 이동하고 있습니다 config.toml. 당신은 프로그래밍 방식으로 일부 데이터를 생성, 그것은 무엇 때문에 JSON으로 나왔다 JSON.stringify 을 생산하고,소비자는 Cargo 또는 Hugo 또는 TOML 라이브러리를 사용하는 Go 서비스입니다. 모든 경우에 데이터는 동일합니다. 직렬화만 다릅니다.

반대 방향도 존재하지만 다른 직업입니다. 반대 방향으로 가고 있다면 JSON 포맷터 JSON을 먼저 확인하려면 마음을 열어 둘 가치가 있습니다 JSON 에서 YAML 변환기 다른 일반적인 config 형식을 다룹니다. 이 가이드는 TOML 로 들어가는 JSON 에 관한 것입니다.

변환기는 JSON을 TOML에 어떻게 매핑합니까?

JSON 에는 몇 가지 도형만 있으며 각 도형에는 TOML 의 홈이 있습니다. 매핑을 이해하는 것이 도구를 이해하는 것의 대부분입니다.

JSON 오브젝트 TOML 이 된다 테이블. 최상위 객체는 루트 테이블이므로 변환기는 입력을 객체로 주장합니다. 중첩된 객체는 됩니다 [table] 점선 경로가 있는 헤더입니다 { "database": { "pool": { "max": 10 } } } 가 된다 [database.pool] 섹션 max = 10 그 안에.

JSON 객체 배열 TOML 이 된다 테이블 배열, 이중 괄호로 작성되었습니다 [[name]] 헤더,요소당 하나의 블록. 이것은 레코드 목록에 대한 관용적 TOML 패턴입니다: 서버 목록,종속성 목록,빌드 대상 목록. 각 요소는 자체 가져옵니다 [[servers]] 블록.

모든 스칼라 직접 매핑합니다. JSON 문자열은 제어 문자가 이스케이프된 큰따옴표로 된 TOML 기본 문자열이 됩니다. JSON 숫자는 정수이고 그렇지 않으면 float 인 경우 TOML 정수가 됩니다. JSON 부울은 true 또는 false. 이것들은 쉬운 경우이며, 변환기는 결코 그들을 잘못 이해하지 못합니다.

JSON 스칼라의 배열 TOML 인라인 배열이 됩니다: ["admin", "editor"] 스테이 ["admin", "editor"]. 혼합 배열과 중첩 배열도 인라인으로 작성됩니다. 왜냐하면 그것이 맞는 유일한 장소이기 때문입니다.

TOML에서 키 순서가 왜 그렇게 중요한가요?

이것은 모든 사람을 잡는 규칙이므로 분명히 말할 가치가 있습니다. TOML 에서는 어떤 테이블 내에서도 그 모든 table's 자신의 키/값 쌍이 하위 테이블 헤더 앞에 나타나야 합니다. a 를 작성하면 [server] 헤더, 일부 키, 루트 테이블에 속하는 다른 키, 파서는 해당 길 잃은 키를 일부로 읽습니다 [server] 대신. 가장 좋은 경우는 잘못된 장소에 착륙; 최악의 경우 파일이 구문 분석에 실패합니다.

JSON 에는 그런 규칙이 없습니다. JSON 에서는 키 순서가 중요하지도 않으며,객체와 스칼라가 동일한 중괄호 안에서 자유롭게 섞입니다. 따라서 삽입 순서로 객체를 걷고 각 키를 내보내는 순진한 JSON-TOML 변환은 스칼라가 중첩된 객체를 따르는 순간 깨진 TOML 을 생성합니다.

변환기는 모든 테이블 위에 두 번의 패스를 함으로써 이를 해결합니다. 먼저 모든 간단한 키,스칼라 및 인라인 배열을 방출합니다. 그런 다음에야 하위 테이블 및 테이블 배열 헤더를 방출하여 각각으로 반복됩니다. 키 순서는 각 그룹 내에서 보존되며,이는 원하는 것이지만 두 그룹 사이에 필요한 재배열은 자동으로 발생합니다. 생각할 필요도 없고,제가 얻은 오류도 전혀 발생하지 않습니다.

객체 배열은 언제 테이블 대 인라인이어야 합니까?

여기에 하나의 진정한 선택이 있습니다. 객체의 배열은 TOML 에서 두 가지 방법으로 작성할 수 있으며 둘 다 유효합니다.

첫 번째는 an 테이블 배열는,이중괄호형태입니다. 장황하고 읽을 수 있으며,기록당 한 블록씩,야생에서 대부분의 TOML 이 어떻게 생겼는지 입니다. 만약 a 를 보셨다면 Cargo.toml 여러 개로 [[bin]] 항목, 당신은 이것을 보았습니다.

[[servers]]
name = "web"
ip = "10.0.0.1"

[[servers]]
name = "api"
ip = "10.0.0.2"

두 번째는 an 인라인 테이블 각 개체를 한 줄에 묶는 일반 배열 내부입니다.

servers = [
  { name = "web", ip = "10.0.0.1" },
  { name = "api", ip = "10.0.0.2" },
]

둘 다 동일한 데이터에 왕복합니다. 원하는 것은 대상과 취향에 따라 다릅니다. 사람이 편집할 레코드에 대해 테이블 배열이 더 잘 읽히며 대부분의 툴링 구성에 대한 규칙입니다. 인라인 테이블은 더 컴팩트하고 일부 사람들이 목록이 짧거나 개체가 작을 때 선호하는 원래 JSON 의 모양에 더 가깝습니다. 변환기는 기본적으로 테이블 배열로 설정되어 전환 할 토글을 제공합니다. 확실하지 않은 경우 기본값에 그대로 두십시오: 일반적으로 TOML 파일의 모양입니다.

TOML 에서 JSON null 은 어떻게 되나요?

TOML 에는 null 이 없습니다. 키워드도 없고 빈 값도 없고 아무것도 없습니다. 이것은 형식에 의한 의도적인 디자인 결정이며 JSON to TOML 이 진정으로 손실이 있는 유일한 곳입니다.

그래서 변환기는 선택을 해야하고,그것을 만들 수 있게 합니다. 기본적으로 값이 있는 키는 null 는 삭제되고,도구는 출력 아래의 메모에 삭제된 키를 나열하므로 아무것도 조용히 사라지지 않습니다. 키를 유지하는 것이 좋다면 빈 문자열로 null 을 쓰는 것으로 전환할 수 있으며,이는 유형을 변경하는 대가로 키를 보존합니다. 둘 다 완벽하지 않습니다. 완벽한 답이 없기 때문에 중요한 것은 선택이 묻혀 있는 것이 아니라 눈에 보인다는 것입니다.

배열 내부의 Null 은 항상 경고와 함께 삭제됩니다. 왜냐하면 TOML 배열은 null 을 전혀 포함할 수 없기 때문입니다. JSON 이 가지고 있는 경우 [1, null, 3], TOML이 될 것입니다 [1, 3] 그리고 도구는 하나를 제거했다고 알려줄 것입니다. 만약 그 널들이 의미를 지니고 있다면,그것은 변환 후가 아니라 변환하기 전에 데이터의 모양을 바꾸는 신호입니다.

왜 내 숫자는 소수를 잃었거나, 하나를 얻었습니까?

이것은 유형에 관심이있는 사람들을 놀라게합니다. JSON 은 구별하지 않습니다 5 부터 5.0. 둘 다 동일한 IEEE 754 double 로 구문 분석하며,그때까지 JSON.parse 는 뒤에 오는 영의 아무 흔적도 없다 행해진다. 그래서 변환기가 숫자를 볼 때 5, 당신이 플로트를 의미했다는 것을 알 방법이 없습니다 5 TOML 정수를 작성하는 정수입니다.

반면에 TOML 은 정수와 floats 를 구별하고,일부 도구는 그 차이에 신경을 씁니다. float 로 입력된 값이 필요하다면,그것을 소스에 분수 부분을 주는 것이 수정입니다 5.1 또는 5.0 살아남는 방식으로 작성하거나 변환 후 단일 값을 편집합니다. 한 글자 변경이며 드물지만 변환기가 잘못되었다고 가정하기보다는 왜 그런 일이 발생하는지 알 가치가 있습니다. 틀린 것은 아닙니다. JSON 은 변환기가보기 전에 단순히 정보를 버렸습니다.

반대의 경우는 매우 크거나 매우 작은 숫자로 나타나며, 여기서 JavaScript's String() 와 같은 지수 표기법을 생성합니다 1e+21. TOML 은 그것을 float 로 받아들이므로,잘 변환되지만,숫자의 모양은 입력한 것과 다르게 보일 수 있습니다. 다시 말하지만,값은 동일합니다; 렌더링만 변경되었습니다.

베어 키와 인용 키는 어떻게 작동합니까?

TOML 은 글자,숫자, 밑줄 및 대시로만 만들어진 경우 키를 맨손으로 쓸 수 있도록 합니다. 그 외의 모든 것,점, 공백,슬래시, 유니코드 문자가 있는 키를 인용해야 합니다. 변환기는 각 키를 확인하고 필요한 키만 인용합니다 user-name 맨손으로 유지되고 "user.name" 테이블 경로로 읽히는 점을 멈추기 위해 따옴표를 가져옵니다. 이것에 대해 생각할 필요는 없지만 출력에서 키 주위에 따옴표가 표시되는 경우 그 이유는 다음과 같습니다: 키에는 의미를 바꿀 문자가 포함되어 있습니다.

작업된 예

여기 공구가 로드하는 샘플이 있어 모든 규칙을 한 번에 볼 수 있습니다. JSON:

{
  "title": "Toolz config",
  "version": 2,
  "enabled": true,
  "owner": { "name": "Liton", "roles": ["admin", "editor"] },
  "database": { "host": "localhost", "port": 5432, "pool": { "min": 2, "max": 10 } },
  "servers": [
    { "name": "web", "ip": "10.0.0.1" },
    { "name": "api", "ip": "10.0.0.2" }
  ]
}

루트 스칼라가 먼저 오는 TOML이 되고, 중첩된 개체는 순서대로 점선 테이블이 되며, 서버 배열은 2개가 됩니다 [[servers]] 블록:

title = "Toolz config"
version = 2
enabled = true

[owner]
name = "Liton"
roles = ["admin", "editor"]

[database]
host = "localhost"
port = 5432

[database.pool]
min = 2
max = 10

[[servers]]
name = "web"
ip = "10.0.0.1"

[[servers]]
name = "api"
ip = "10.0.0.2"

주목하세요 title, version 그리고 enabled 는 어떤 헤더 앞에 쓰여집니다 roles 문자열 배열이므로 인라인 배열을 유지합니다 [database.pool] 아래에 앉는다 [database] 점선 경로로. 이 가이드의 모든 규칙은 9 줄의 출력에서 볼 수 있습니다.

어떤 변환을 위한 어떤 도구인가요?

TOML 은 가족 중 하나의 형식이며 올바른 도구는 시작하고 끝나는 위치에 따라 다릅니다. 여기에 대해 어떻게 생각하는지.

당신은 가지고있다 당신은 원해요 사용
JSON TOML 구성 JSON을 TOML로
JSON YAML 구성 JSON에서 YAML로
얌 JSON YAML 에서 JSON 으로
JSON XML JSON에서 XML로
지저분한 JSON 읽을 수 있는 JSON JSON 포맷터

패턴은 config 형식이 동일한 데이터의 상호 교환 가능한 뷰이며 원하는 변환기는 이동 방향에 따라 이름이 지정됩니다. TOML,YAML 및 JSON 은 모두 중첩 키/값 데이터를 표현합니다; 차이점은 대상 도구가 읽는 것입니다.

온라인으로 config 파일을 변환하는 것이 안전한가요?

Config 파일은 정확히 당신이 웹 사이트에 붙여 넣기에 대해주의해야하는 종류의 것입니다, 그들은 종종 연결 문자열을 포함하기 때문에, 토큰, 및 기타 비밀. The JSON 에서 TOML 변환기 브라우저에서 완전히 실행됩니다. 붙여넣은 JSON 은 장치의 메모리에서 구문 분석되고 TOML 이 생성되며 서버로 전송되거나 로그에 기록되거나 저장되지 않습니다. 이것을 직접 볼 수 있습니다: 네트워크 탭을 열고 변환을 실행하고 요청이 나가지 않는 것을 확인합니다. 또한 페이지가 로드되면 연결 없이 계속 작동하며 이는 작업이 로컬이라는 실질적인 증거입니다. 데이터가 어디로 가는지,그리고 구성 파일을 사용해야 하는지에 관심이 있다면 이것이 중요한 속성입니다. 사이트의 모든 도구 뒤에 있는 동일한 원리이며 메모에 길게 쓴 이유입니다 온라인 도구의 데이터 개인 정보 보호.

이것이 실제 워크플로에 적합한 곳

포맷 변환은 거의 전체 작업이 아닙니다. 그것은 단계입니다. 당신은 API 에서 설정 객체를 끌어,당신은 그것을 변환,당신은 프로젝트로 드롭. 클라이언트 측 변환기의 값은 마찰없이 그 흐름에 슬롯입니다: 업로드,계정 없음,서버에서 대기 없음,당신의 비밀이 지금 someone's 로그에 있는지 궁금해하지 않습니다. 그것은 내가 전체를 유지하는 것과 같은 이유입니다 Toolz.dev 클라이언트 측을 설정하면 다시 설명하는 테마입니다 개발자 생산성 도구 하루에 20번씩 도달하는 도구는 2초 왕복 여행과 개인 정보 보호 질문이 합쳐지는 도구이기 때문에 글을 쓰세요.

TOML 은 가장 좋은 방법으로 지루함으로써 그 흐름에서 그 자리를 얻었습니다. 그것은 어디에서나 동일하게 구문 분석하고,잘 읽으며,그 하나의 날카로운 모서리 인 순서 규칙은 정확히 변환기가 당신을 위해 파일 다운해야하는 종류의 JSON 을 붙여 넣고,배열 및 널을 처리하는 방법을 선택하고,방금 작동하는 TOML 을 복사하십시오.

자주 묻는 질문

JSON 을 TOML 로 변환하려면 어떻게 해야 하나요?

JSON 개체를 변환기에 붙여넣고 변환을 클릭합니다. 이 도구는 개체를 TOML 테이블로 직렬화하고 개체 배열을 테이블 배열로 연결하며 다른 모든 값을 인라인으로 연결한 다음 복사할 표준 TOML 을 제공합니다. 최상위 JSON 은 개체여야 합니다. TOML 문서는 항상 테이블이기 때문입니다.

TOML은 어떤 용도로 사용되나요?

TOML 은 읽기 쉽고 구문 분석하기 명확하게 설계된 구성 파일 형식입니다. Rust's Cargo (Cargo.toml), Python 패키징 (pyproject.toml), Hugo 및 많은 Go 및 Rust 도구에 대한 구성 형식입니다. 사람들은 JSON 을 TOML 로 변환하여 기계에서 생성 된 구성을 TOML 을 기대하는 도구에 전달합니다.

TOML 에서 JSON null 값은 어떻게 되나요?

TOML 에는 널 타입이 없으므로 JSON 널을 직접 나타낼 수 없습니다. 기본적으로 이 변환기는 널 키를 떨어뜨리고 그것들을 나열하는 메모를 추가합니다; 대신 빈 문자열로 쓰는 것으로 전환할 수 있습니다. 배열 내부의 Null 은 항상 드롭됩니다. TOML 배열은 null 을 포함할 수 없기 때문입니다.

테이블 배열과 인라인 테이블의 차이점은 무엇입니까?

테이블 배열은 레코드당 하나의 블록으로 반복되는 이중 브래킷 헤더를 사용하며 서버 또는 종속성 목록과 같은 개체 목록을 작성하는 관용적 TOML 방법입니다. 인라인 테이블은 키 집합이 중괄호 안의 값 쌍과 같기 때문에 개체를 한 줄에 팩합니다. 이 도구는 기본적으로 테이블 배열을 사용하지만 대신 인라인을 선택할 수 있습니다.

왜 내 JSON 번호 5.0이 TOML에서 5가 되었습니까?

JSON 은 5 와 5,0 의 차이를 보존하지 않으므로 구문 분석은 둘 다 숫자 5 로 읽습니다. 5 는 정수이므로 변환기는 TOML 정수로 씁니다. float 로 입력해야하는 경우 소스에 분수 부분을 추가하거나 변환 후 단일 값을 편집하십시오.

변환기는 내 키 순서를 유지합니까?

예. 키는 JSON 에 나타나는 순서대로 방출되며,하나의 필요한 재배열이 있습니다: 각 테이블 내에서 일반 키는 하위 테이블 또는 테이블 배열 헤더 앞에 작성됩니다. 이는 재정렬 선택이 아닌 TOML 구문 규칙이며,이것이 없으면 파일은 구문 분석하지 않습니다.

내 json이 서버에 업로드되었습니까?

아니요. 전체 변환은 일반 JavaScript 를 사용하여 브라우저에서 발생합니다. 구성 파일의 비밀이나 자격 증명을 포함한 JSON 은 전송,로그 또는 저장되지 않으며 페이지가로드되면 변환기는 연결되지 않고 계속 작동합니다.

왜 최상위 레벨은 객체여야 한다고 말하는가?

TOML 문서는 테이블로 정의되며,이는 키/값 쌍의 집합에서 시작해야 함을 의미합니다. 베어 JSON 배열 또는 스칼라에는 매핑할 테이블이 없습니다. 예를 들어 배열을 명명된 키 아래에 두는 것과 같이 객체에 먼저 감싸면 변환됩니다.

Comments

0 comments

0/2000 characters

No comments yet. Be the first to share your thoughts!