JSON→XML 변환기

JSON 데이터를 XML로 변환합니다. @attributes는 요소의 속성으로, #text는 텍스트 내용으로, 배열은 같은 이름의 형제 요소로 복원됩니다 — XML→JSON 변환기의 역방향 작업이며, 브라우저에서 완결됩니다.

JSON→XML 변환의 규약

JSON과 XML은 모두 구조화된 데이터를 표현하는 형식이지만, 표현할 수 있는 것이 조금씩 다릅니다. XML에는 「속성」과 「텍스트 내용」이라는, JSON에는 존재하지 않는 개념이 있습니다. 그래서 단순하게 변환하려고 하면 속성을 어떻게 표현할지, 같은 이름의 요소가 늘어선 배열을 어떻게 되돌릴지에서 반드시 고민이 생깁니다. 이 도구는 널리 쓰이는 규약을 채택하여 `@attributes`를 요소의 속성으로, `#text`를 텍스트 내용으로, 배열을 같은 이름의 형제 요소로 되돌립니다.

예를 들어 `{"book": {"@attributes": {"id": "1"}, "#text": "제목"}}`은 `제목`이 됩니다. `{"item": [1, 2]}`는 `12`라는 두 개의 형제 요소가 됩니다. 텍스트 내용에서는 `&` `<` `>`를, 속성값에서는 추가로 `"`를 실체 참조로 자동 이스케이프하므로 값에 기호가 포함되어 있어도 깨진 XML이 되지 않습니다. 처리는 모두 브라우저 안에서 완결됩니다.

JSON을 XML로 변환하는 순서

  1. JSON을 붙여 넣습니다 변환하고 싶은 JSON을 그대로 입력합니다. 객체든 배열이든 상관없습니다.
  2. 속성으로 만들 것은 @attributes에 둡니다 요소의 속성으로 내보내고 싶은 키는 `@attributes` 객체 안에 모아 둡니다.
  3. 텍스트 내용은 #text에 둡니다 속성과 본문을 모두 가진 요소로 만들고 싶다면 본문에 해당하는 값을 `#text`에 넣습니다.
  4. 결과를 확인하고 복사합니다 들여쓰기된 XML이 생성됩니다. 그대로 설정 파일이나 API 요청에 붙여 넣을 수 있습니다.

더 잘 활용하기 위한 팁

  • `@attributes` 키에 객체를 넣으면 해당 객체의 각 속성이 변환된 요소의 속성이 됩니다.
  • `#text` 키는 속성이나 자식 요소와 함께 존재하는 요소의 텍스트 내용을 나타낼 때 사용합니다. 속성이 없는 단순한 요소는 문자열을 값으로 직접 사용하면 됩니다.
  • 같은 키에 배열을 지정하면 배열의 각 항목이 같은 이름의 형제 요소로 반복 출력됩니다.
  • 값으로 `null`을 지정하면 속성·텍스트·자식 요소가 없는 빈 자체 종료 태그(``)가 됩니다.
  • 이 도구는 자매 도구인 "XML→JSON 변환기"의 출력 형식(루트 요소 이름을 키로 하는 객체, 최상위 키는 하나만)을 입력으로 전제합니다.

이럴 때 쓸 수 있습니다

XML만 받는 API로 보낼 때

가진 데이터가 JSON이어도 보내는 쪽이 XML을 요구하는 경우에 변환할 수 있습니다. 오래된 업무 시스템과 연계할 때 자주 생기는 상황입니다.

설정 파일 형식을 옮길 때

JSON으로 작성된 설정을 XML 기반 도구로 옮길 때의 초안으로 쓸 수 있습니다.

XML 구조를 JSON으로 구상할 때

중첩이 깊은 XML을 직접 쓰는 일은 번거롭지만, JSON으로 조립한 뒤 변환하면 훨씬 보기 쉬워집니다.

변환 규약 자체를 확인할 때

`@attributes`와 `#text`가 어떻게 반영되는지 실제로 시험해 보면, 직접 만드는 변환 처리의 사양을 정하는 참고가 됩니다.

JSON→XML 변환 용어

속성(attribute)
``에서 `id="1"` 부분입니다. JSON에는 대응하는 개념이 없기 때문에 이 도구에서는 `@attributes`라는 특별한 키로 표현합니다.
텍스트 내용(#text)
`제목`에서 본문에 해당하는 부분입니다. 속성과 동시에 갖게 하고 싶을 때 `#text`를 사용합니다.
실체 참조(이스케이프)
`&`를 `&`처럼 바꿔 쓰는 것입니다. **`&`를 가장 먼저 변환하지 않으면 나중에 만들어진 `<`의 `&`까지 이중으로 변환되어 버립니다.**
같은 이름의 형제 요소
XML에서는 같은 태그 이름의 요소를 나열해 배열을 표현합니다. JSON의 배열은 이 형태로 되돌아갑니다.
루트 요소
XML은 최상위에 단 하나의 요소만 가질 수 있습니다. JSON의 최상위가 여러 키를 가진 경우에는 그 처리에 주의가 필요합니다.

자주 묻는 질문

`@attributes`라는 이름의 키에 객체를 넣으면 해당 객체의 각 속성이 변환된 XML 요소의 속성이 됩니다. 예를 들어 `{"@attributes": {"category": "fiction"}}`은 `category="fiction"` 속성으로 변환됩니다.

같은 키에 배열을 지정하면 배열의 각 항목이 같은 이름의 형제 요소로 여러 번 출력됩니다. 예를 들어 `"book": [{"title": "A"}, {"title": "B"}]`은 `` 태그가 두 개 생성되는 XML로 변환됩니다.

가장 흔한 원인은 JSON 문법 오류(쉼표 누락이나 따옴표 누락)입니다. 또한 XML은 루트 요소가 하나만 있어야 하므로, 최상위에 여러 키가 있는 JSON이나 루트가 배열인 JSON도 오류가 됩니다.

네, 사이트 내 "XML→JSON 변환기"가 반대 방향 변환을 지원합니다. 두 도구가 같은 변환 규칙을 사용하므로 양방향으로 오가도 내용이 그대로 유지됩니다.

이 도구는 "XML→JSON 변환기"의 규칙(`@attributes`、`#text`、배열、null)을 전제로 합니다. 이 규칙을 따르지 않는 자유 형식의 JSON(숫자와 불리언으로 가득한 일반적인 API 응답 등)은 예상한 XML 구조로 변환되지 않을 수 있습니다.
툴군

여담 ― JSON을 XML로 "되돌릴" 때 주의할 점

XML을 JSON으로 변환하는 것은 일종의 "정보 압축"에 가깝습니다. XML은 속성·텍스트·자식 요소라는 세 가지 정보를 가질 수 있지만 JSON은 단순한 키-값 대응 관계만 가질 수 있으므로, 변환 시 어떤 규칙(본 도구에서는 `@attributes`/`#text`/배열/null이라는 네 가지 규칙)을 채택해야 합니다. 이 규칙만 지켜진다면 JSON을 XML로 "되돌리는" 변환은 기계적으로 일의적으로 정해지지만, 규칙을 따르지 않는 자유 형식의 JSON을 억지로 XML화하려고 하면 속성인지 요소인지 구분이 되지 않아 변환 결과가 예상과 달라질 수 있습니다.

실무에서는 레거시 XML API를 일단 JSON으로 변환하여 JavaScript로 가공한 뒤, 다시 XML로 되돌려 다른 시스템에 전송하는 상황이 있습니다. 예를 들어 SOAP 형식 웹 API의 응답을 JSON으로 가공하기 쉽게 만든 후, 같은 SOAP 형식의 요청으로 다시 보내야 하는 경우입니다. 이런 왕복 변환에서는 변환 규칙의 일관성이 무엇보다 중요하며, 중간에 다른 규칙을 쓰는 도구를 끼워 넣으면 속성과 텍스트의 대응 관계가 무너질 수 있습니다.

본 도구가 "최상위 키는 하나만"이라는 규칙을 엄격히 적용하는 것은 XML 자체의 사양(루트 요소는 반드시 하나)을 반영한 것입니다. 여러 최상위 키를 가진 JSON을 변환하고 싶다면, 미리 공통 부모 키(예: `root`)로 감싼 후 본 도구에 입력하면 단일 루트 요소를 가진 XML로 출력할 수 있습니다.