XML→JSON 변환기
XML 데이터를 JSON으로 변환합니다. 오래된 XML API 응답, SOAP 페이로드, RSS/Atom 피드를 속성은 @attributes, 텍스트는 #text, 반복 요소는 배열이라는 규칙으로 브라우저에서 바로 JSON으로 바꿀 수 있습니다.
XML을 JSON으로 바꾸기
오래된 XML API나 SOAP 연계, RSS·Atom 피드의 내용을 손에 익은 JSON 모양으로 보고 싶을 때가 있습니다. 이 도구는 붙여 넣은 XML을 변환하며 그 일을 브라우저 안에서 모두 끝내므로, 넣은 데이터가 어디로도 보내지지 않습니다.
**약속이 필요한 까닭은 XML과 JSON이 데이터를 담는 방식 자체가 다르기 때문입니다.** XML은 속성과 텍스트를 가르고 같은 이름의 요소를 몇 번이든 늘어놓을 수 있지만, JSON에는 그 어느 것도 없습니다. 그래서 속성은 `@attributes`에, 요소가 직접 지닌 문자열은 `#text`에 담고, 되풀이되는 요소는 배열로 바꿉니다. **피할 수 없는 것은, 되풀이될 수 있는 요소가 마침 한 번만 나왔을 때 생기는 모호함입니다.** 원래의 XML에서는 여전히 「되풀이되는 것의 한 건」이지만 JSON으로 오면 단일 값처럼 보이므로, 받는 쪽 코드는 한 개일 때와 여러 개일 때를 모두 감당하도록 쓰는 편이 안전합니다.
사용하는 방법
- XML을 붙여 넣습니다 SOAP 응답이든 RSS 피드든 받은 그대로 넣어도 됩니다.
- 변환 결과를 확인합니다 **속성은 `@attributes` 키에, 텍스트는 `#text`에 담깁니다.**
- 구조를 견줍니다 원래의 XML과 나란히 놓고 어떤 요소가 어느 키로 갔는지 확인할 수 있습니다.
- 복사하거나 내려받습니다 코드에 바로 붙여도 되고 파일로 저장해도 됩니다.
더 잘 활용하기 위한 팁
- 속성을 가진 요소는 `@attributes` 키 안에 객체로 모이며, 요소 자체의 텍스트나 자식 요소와는 구분됩니다.
- 속성과 자식 요소·텍스트가 함께 있는 요소에서는 텍스트 부분이 `#text` 키에 저장되어 속성값과 혼동되지 않습니다.
- 같은 이름의 형제 요소가 여러 번 나오면 자동으로 배열로 묶입니다. `
- `이 3개면 3개짜리 배열이 되고, 1개뿐이면 단일 객체로 남습니다.
- 속성도 텍스트도 자식 요소도 없는 빈 요소(예: `
`)는 `null`로 변환됩니다. - `xmlns` 같은 네임스페이스 접두사는 분리하지 않고 `ns:tag`처럼 요소 이름 그대로 키로 사용됩니다.
이럴 때 쓸 수 있습니다
XML API를 JSON만 다루는 코드에 이을 때
받는 쪽이 JSON만 다룬다면 변환된 모양을 미리 굳혀 둘 수 있습니다.
RSS·Atom 피드를 해석할 때
피드의 항목을 JSON으로 바꾸면 그대로 스크립트에 돌리기가 한결 수월해집니다.
SOAP 응답의 내용을 읽을 때
**중첩과 네임스페이스 탓에 읽기 힘든 SOAP도 계층을 JSON으로 펼쳐 놓으면 훨씬 따라가기 쉬워집니다.**
테스트용 픽스처를 만들 때
실제 XML 응답에서 JSON 모의 데이터를 뽑아낼 수 있습니다.
변환 약속의 용어
- @attributes
- **XML 요소의 속성을 담는 키입니다.** JSON에는 속성이라는 개념이 없어 따로 키를 마련해 둔 것입니다.
- #text
- 요소가 직접 지닌 문자열을 담는 키입니다. 속성과 자식 요소를 함께 가진 요소에서 필요해집니다.
- 반복 요소
- 같은 이름으로 한 번을 넘겨 나타나는 요소입니다. **JSON에서는 배열이 되지만, 한 번만 나온 경우에는 원소 하나짜리 배열이 아니라 단일 값으로 나타납니다.**
- 네임스페이스 접두사
- `soap:Body`의 `soap:` 부분입니다. JSON에서는 키 이름의 일부로 그대로 남습니다.
- 혼합 내용
- 텍스트와 자식 요소가 한 요소 안에 함께 든 상태입니다. **JSON에는 들어맞는 구조가 없어, 변환에서 정보가 가장 쉽게 떨어져 나가는 자리입니다.**
- 루트 요소
- XML의 맨 위에 있는 단 하나의 요소입니다. JSON에서는 가장 바깥의 키가 됩니다.
자주 묻는 질문
여담 ― XML과 JSON 사이에 "유일한 정답"이 없는 이유
CSV와 JSON 사이의 단순한 행→객체 대응과 달리, XML과 JSON 사이에는 누구나 인정하는 단 하나의 변환 규칙이 존재하지 않습니다. XML은 속성·텍스트 노드·자식 요소라는 세 종류의 정보가 한 요소 안에 공존할 수 있지만, JSON은 단순한 키-값 쌍만 가지고 있어 변환 시 어떤 식으로든 규칙을 정해야 합니다. xml2json·xml-js·org.json 같은 주요 구현체들은 속성을 어떻게 표현할지, 텍스트와 자식 요소가 함께 있을 때 무엇을 우선할지에서 서로 다른 규칙을 채택해 왔습니다.
그럼에도 개발자들은 여전히 XML을 자주 접하게 됩니다. SOAP 기반 웹 API, 금융·행정·의료 분야의 수십 년 된 시스템 간 연동, RSS/Atom 피드, 안드로이드 레이아웃 파일 등은 XML이 오늘날에도 표준 형식으로 쓰이고 있는 대표적인 영역입니다. 이런 레거시 시스템에서 얻은 데이터를 jq로 가공하거나 JavaScript에서 일반 객체로 다루는 등, JSON 전용의 현대적인 도구 체인에 올리고 싶다는 수요는 꾸준히 남아 있습니다.
이 도구가 채택한 `@attributes`/`#text` 규칙은 기호를 과도하게 사용하는 철저한 표기법이 아니라, 실무에서 널리 쓰이는 단순한 규칙을 선택한 것입니다. 속성이 없는 리프 요소는 텍스트를 그대로 값으로 변환하므로 단순한 설정값이나 RSS 제목 같은 일반적인 경우에는 읽기 쉬운 JSON이 되고, 속성이 있는 요소만 명시적으로 구분되므로 변환 결과만 봐도 원래 어떤 값이 속성이었는지 한눈에 알 수 있습니다.