도구
가이드

JSON ↔ XML 변환기

JSON

JSON과 XML을 상호 변환합니다. 중첩 객체는 설정 가능한 루트 요소로 감싸집니다.

100% 클라이언트 백엔드 없음
입력
출력
이 페이지에서

JSON ↔ XML 변환기란?#

JSON과 XML은 구조화된 데이터를 적어 내려가는 두 가지 다른 방식이며, 구문 수준에서는 서로 바꿔 쓸 수 없습니다. 한쪽은 중괄호와 대괄호를 쓰고 다른 쪽은 꺾쇠괄호 태그를 씁니다. 양쪽 사이의 변환기는 “압축”하거나 “인코딩”하는 것이 아니라, 같은 값 트리를 다른 표기법으로 다시 표현합니다. 그래서 XML만 이해하는 시스템이 JSON으로 도착한 데이터를 소비할 수 있고, 그 반대도 가능합니다.

매핑은 대부분 기계적이지만 잘 알려진 거친 부분 두 가지가 있습니다. 첫째, XML은 모든 것을 감싸는 정확히 하나의 루트 요소 가 필요하지만, JSON은 최상위가 객체나 배열이어도 문제없이 허용합니다. 그래서 JSON에서 XML로 갈 때는 항상 바깥 wrapper의 이름을 정해야 합니다. 둘째, XML 요소는 속성을 가질 수 있 는데(<a id="7">) JSON에는 이에 대응하는 것이 없습니다. 일반적인 관례는 속성을 @ 접두어가 붙은 키 아래 두고, 속성과 나란히 있는 텍스트는 #text 키 아래 두는 것입니다.

이 페이지는 브라우저에서 양방향으로 변환합니다. JSON을 XML로(값을 사용자가 이름 붙인 루트 요소 아래 감싸서), XML을 JSON으로(속성을 @ 키로 풀고, 기본적으로 바깥 루트를 벗겨 내어 안의 값을 돌려줍니다).

사용 방법#

  1. 도구 모음 왼쪽 위의 JSON → XML / XML → JSON 토글로 방향을 고르세요.
  2. 왼쪽 입력 패널에 타이핑하거나 붙여넣으세요.
    • JSON → XML 은 올바른 JSON을 기대합니다. 모든 최상위 값이 루트 요소 아래 감싸집니다.
    • XML → JSON 은 잘 구성된 XML 문서를 기대합니다. 바깥쪽 단일 요소는 자동으로 벗겨지고, 안의 콘텐츠를 JSON으로 돌려줍니다.
  3. JSON → XML 모드에서는 루트 요소 필드(기본값 root)로 wrapper 태그 이름을 정하세요. 예를 들어 user, feed, response. XML은 단일 루트를 요구하므로 이 이름은 항상 필요합니다.
  4. 결과는 출력 패널에 실시간으로 나타납니다. 복사 로 가져가세요.
  5. 예제 는 현재 방향에 맞는 작은 문서를 불러오고, 지우기 는 양쪽 패널을 초기화합니다.

주요 기능#

  • 한 도구로 양방향. 하나의 토글로 JSON→XML과 XML→JSON 사이를 전환하며, 입력 패널이 자동으로 재설정됩니다.
  • 구성 가능한 루트 요소. XML은 단일 바깥 요소 없이 존재할 수 없으므로 wrapper 이름을 직접 정합니다. 변환기는 모든 JSON 최상위 형태에 대해 감싸기를 처리합니다.
  • 올바른 XML 선언. JSON→XML 출력은 표준 <?xml version="1.0" encoding="UTF-8"?> 프롤로그로 시작하며 공백 2칸 들여쓰기로 예쁘게 출력됩니다.
  • 속성 왕복. XML→JSON은 요소 속성을 @ 접두어가 붙은 키 아래 보존하고, 속성 옆에 있는 텍스트는 #text 아래 유지하여 아무것도 조용히 버리지 않습니다.
  • 숫자 인식 파싱. XML은 전부 텍스트이지만, 파서는 숫자처럼 보이는 요소 값을 JSON 숫자로 되돌립니다(<age>36</age>"36"이 아니라 36이 됩니다).

실전 예시#

JSON → XML#

방향을 JSON → XML 로 하고 루트 이름을 root로 한 채 예제 를 불러오면:

{
  "name": "Ada",
  "age": 36,
  "skills": ["math", "logic"]
}

변환기는 모든 것을 <root> 아래 감싸고 배열을 XML 방식대로 펼칩니다. 각 항목은 같은 태그 이름으로 자기만의 요소가 됩니다.

<?xml version="1.0" encoding="UTF-8"?>
<root>
  <name>Ada</name>
  <age>36</age>
  <skills>math</skills>
  <skills>logic</skills>
</root>

루트 요소 필드를 person으로 바꾸면 wrapper가 <person> / </person>이 됩니다. 안의 구조는 그대로입니다.

XML → JSON#

XML → JSON 으로 전환해 예제 를 불러오면:

<?xml version="1.0"?>
<root><name>Ada</name><age>36</age></root>

바깥 <root>는 벗겨지고 안의 요소들이 JSON 속성이 되며, 36은 숫자로 인식됩니다.

{
  "name": "Ada",
  "age": 36
}

속성도 보존됩니다. <a id="7">label</a> 같은 요소는 { "@id": "7", "#text": "label" }을 만들어냅니다. 속성은 @id 아래, 텍스트는 #text 아래에 놓이며 어느 쪽도 손실되지 않습니다.

FAQ#

왜 내 JSON 배열이 안에 항목을 담은 wrapper 하나가 아니라 반복된 XML 요소로 바뀌나요?#

XML이 목록을 표현하는 방식입니다. “배열” 구문이 없으므로 각 항목이 같은 태그 이름으로 자기만의 요소여야 합니다. 따라서 키 skills 아래의 JSON 배열 ["math", "logic"]은 자식을 담은 단일 <skills>가 아니라 두 개의 형제 <skills> 요소가 됩니다. 이는 표준적이고 스키마 친화적인 매핑이며 XML 소비자도 이를 기대합니다.

XML → JSON에서 바깥 요소는 어디로 갔나요?#

변환기는 단일 루트를 자동으로 벗겨 냅니다. XML은 정확히 하나의 최상위 요소를 강제하지만, JSON에서 그 wrapper는 보통 중복입니다. <root><name>Ada</name></root>root 안에 JSON이 필요로 하는 정보를 아무것도 담고 있지 않습니다. 벗겨 내면 의미 있는 안의 값을 직접 얻습니다. 루트를 꼭 보존해야 한다면, 그냥 일반 요소로 두고 이름으로 접근하세요.

36이 문자열이 아니라 숫자인가요?#

XML에는 별도의 숫자 타입이 없습니다. 태그 사이의 모든 것은 텍스트입니다. 파서는 숫자 강제 변환을 적용하여, 텍스트가 숫자처럼 보이는 요소(36, 3.14)는 JSON 숫자로 돌아옵니다. 일반적인 데이터에는 편리하지만, 제품 코드 <code>007</code> 같은 값은 선행 0을 잃게 됩니다. 그런 값은 속성으로 저장하거나 문자열로 받아들이세요.

임의의 XML 문서를 변환할 수 있나요?#

잘 구성된 XML이라면 가능합니다. 태그의 네임스페이스, 속성, 자기 닫기 요소, 선언을 포함합니다. DTD를 해석하거나 스키마에 대해 검증하거나 외부 엔티티를 가져오지는 않습니다. 처리는 로컬이고 텍스트 전용이며, 이는 완전히 신뢰하지 않는 문서를 붙여넣어도 안전하다는 뜻입니다.