XML→JSON 변환기

XML 데이터를 JSON으로 변환합니다. 오래된 XML API 응답, SOAP 페이로드, RSS/Atom 피드를 속성은 @attributes, 텍스트는 #text, 반복 요소는 배열이라는 규칙으로 브라우저에서 바로 JSON으로 바꿀 수 있습니다.

사용 팁

  • 속성을 가진 요소는 `@attributes` 키 안에 객체로 모이며, 요소 자체의 텍스트나 자식 요소와는 구분됩니다.
  • 속성과 자식 요소·텍스트가 함께 있는 요소에서는 텍스트 부분이 `#text` 키에 저장되어 속성값과 혼동되지 않습니다.
  • 같은 이름의 형제 요소가 여러 번 나오면 자동으로 배열로 묶입니다. ``이 3개면 3개짜리 배열이 되고, 1개뿐이면 단일 객체로 남습니다.
  • 속성도 텍스트도 자식 요소도 없는 빈 요소(예: ``)는 `null`로 변환됩니다.
  • `xmlns` 같은 네임스페이스 접두사는 분리하지 않고 `ns:tag`처럼 요소 이름 그대로 키로 사용됩니다.

자주 묻는 질문

각 요소의 속성은 `@attributes`라는 키 안에 객체로 모입니다. 예를 들어 ``는 `{"@attributes": {"category": "fiction"}, ...}`처럼 변환되어, 요소 자체의 값(텍스트나 자식 요소)과는 별도로 저장되므로 혼동되지 않습니다.

같은 부모 아래에 같은 이름의 형제 요소가 여러 개 있으면 자동으로 배열로 묶입니다. 예를 들어 `` 태그가 2개면 변환된 JSON에서 `book` 키의 값이 2개짜리 배열이 됩니다. 하나뿐이면 배열이 아닌 단일 객체 그대로 유지됩니다.

가장 흔한 원인은 종료 태그 누락이나 이름 불일치(시작 태그와 다른 이름으로 닫힌 경우)입니다. 또한 XML은 루트 요소가 하나여야 하므로, `......`처럼 최상위에 여러 요소를 나란히 붙여넣어도 오류가 발생합니다.

이 도구는 XML→JSON 방향만 지원합니다. JSON이나 XML 자체를 정리하거나 검증하고 싶다면 사이트 내의 다른 포맷터 도구를 이용해 주세요.

네임스페이스 접두사는 분리하지 않고 `ns:tag` 형태 그대로 키 이름으로 사용됩니다. 접두사와 URI를 연결하는 네임스페이스 해석까지는 수행하지 않으므로, 복잡한 네임스페이스를 사용하는 XML은 예상한 구조로 변환되지 않을 수 있습니다.
ツールくん

여담 ― 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이 되고, 속성이 있는 요소만 명시적으로 구분되므로 변환 결과만 봐도 원래 어떤 값이 속성이었는지 한눈에 알 수 있습니다.