XML을 JSON으로 변환

XML을 JSON으로 변환 — 속성·반복 태그 처리, 들여쓰기 5종, 루트 제거 선택. 붙여넣기·파일 열기·웹 주소 불러오기. 브라우저에서만 처리, 업로드 없음.

브라우저가 그 주소에 직접 요청합니다 — 파일이 이 사이트를 거치지 않습니다.

🔒 브라우저에서 실행되며 업로드되지 않습니다.

브라우저에서 XML을 JSON으로 변환

형식이 올바른 XML을 붙여넣으면 입력하는 즉시 JSON이 만들어집니다 — 따로 변환 버튼을 누를 필요가 없습니다. 각 요소는 태그 이름을 키로 하는 JSON이 되고, 네임스페이스 접두사도 이름의 일부로 그대로 남아 <x:note>"x:note"가 됩니다. 요소의 속성은 @attributes 객체 아래에 모이며, 텍스트 내용은 #text 키에 보관됩니다. 같은 태그가 반복되면 배열로 변환되어 어떤 값도 사라지지 않습니다. &amp; 같은 엔티티는 원래 문자로 돌아오고, CDATA 블록은 안의 텍스트가 그대로 유지됩니다.

간결 모드와 안전한 파싱

기본으로 켜져 있는 간결 모드는 속성도 자식 요소도 없이 텍스트만 있는 요소를 곧바로 문자열 값으로 축약해, 대부분의 API가 기대하는 깔끔한 JSON을 만듭니다. 끄면 같은 요소가 #text 키를 가진 객체로 표현되어 구조가 더 명시적으로 드러납니다. XML은 브라우저 기본 DOMParser로 파싱되므로, 태그가 맞지 않거나 문서 형식이 잘못되면 조용히 틀린 결과를 내는 대신 문제가 생긴 줄과 칸을 한국어로 짚어 줍니다. 속성, 중첩 요소, 혼합 콘텐츠, XML 선언까지 모두 처리합니다.

출력 모양 고르기

JSON 들여쓰기는 다섯 가지입니다 — 공백 2·4·8칸, 단계마다 탭 하나, 그리고 한 줄로 압축. 루트 감싸기는 위쪽을 어디까지 남길지 정합니다. 루트 요소 이름으로 감싼 전체 문서, 루트 요소의 값만, 또는 그 아래 한 단계까지 벗겨 낸 형태를 고를 수 있고, 마지막이 목록 문서에서 보통 원하는 모양입니다. <rows><row>a</row><row>b</row></rows>["a","b"]가 됩니다. 다만 루트 아래 단계에 키가 정확히 하나가 아니면 추측하지 않고 거절하며, 거기서 찾은 키 이름을 그대로 알려 줍니다. 하나를 고르는 순간 나머지가 조용히 사라지기 때문입니다.

파일과 웹 주소

.xml·.svg·.rss·.atom·.xsd·.xsl·.plist·.txt 파일을 5MB까지 열 수 있습니다. 더 큰 파일은 일부만 변환하는 대신 파일 크기와 한도를 함께 알려 주며 거절합니다. 내려받는 파일 이름은 연 파일을 따라가서 orders.xmlorders.json으로 저장됩니다. 웹 주소를 넣어 불러올 수도 있습니다. 요청은 브라우저가 그 주소로 직접 보내므로 문서가 이 사이트를 거치지 않습니다. 그 대가가 CORS입니다 — 다른 사이트의 페이지가 읽는 것을 허용하지 않는 서버는 불러올 수 없고, 그럴 때는 주소 탓으로 돌리지 않고 무엇이 막았는지 설명합니다. 주소 형태가 아닌 글자는 https://를 임의로 붙이지 않고 거절합니다. 문자 인코딩은 서버가 보낸 헤더, 그다음 문서의 <?xml encoding?> 선언, 마지막으로 UTF-8 순서로 정해지므로 charset 헤더 없이 내려오는 EUC-KR 피드도 한글로 읽힙니다. 디스크에서 연 파일은 파일 열기 버튼 옆에서 고른 인코딩으로 읽습니다 — 자동, 또는 EUC-KR·Shift_JIS·GB18030·Big5를 포함한 열 가지 코드페이지. 반대 방향은 JSON을 XML로 변환하는 도구와 짝을 이룹니다.

자주 묻는 질문

입력한 XML이 어딘가로 업로드되나요?

업로드되지 않습니다. 변환은 브라우저 안에서 내장 XML 파서로 모두 처리되며, 붙여넣거나 연 문서는 이 사이트의 서버로 전송되지 않습니다. 애초에 저장할 서버가 없습니다. 이 도구가 보내는 요청은 사용자가 시킨 것 하나뿐입니다 — “웹 주소에서 XML 불러오기”를 쓰면 브라우저가 그 주소로 직접 요청하므로 지정한 그 서버는 요청을 보게 되지만, 문서는 이 사이트를 거치지 않고 곧바로 사용자에게 옵니다.

속성과 반복 태그는 어떻게 표현되나요?

속성은 요소의 @attributes 객체에 담기고 텍스트는 #text 키에 보관됩니다. 같은 부모 안에서 같은 태그 이름이 여러 번 나오면 해당 요소들이 JSON 배열로 모여 모든 값이 보존됩니다.

간결 모드는 무엇을 하나요?

간결 모드는 속성도 자식 요소도 없이 텍스트만 있는 요소를 일반 문자열로 축약하며, 기본으로 켜져 있습니다. 끄면 같은 요소가 #text 키를 가진 객체로 표현되어 구조가 더 명시적으로 드러납니다.

XML 형식이 잘못되면 어떻게 되나요?

닫히지 않은 태그나 짝이 맞지 않는 태그 같은 파싱 오류를 잡아내, 파서가 멈춘 줄과 칸을 한국어로 알려 줍니다. 브라우저가 내놓는 영어 콘솔 문장을 그대로 보여 주지 않으며, 깨진 JSON을 돌려주지도 않습니다.

들여쓰기를 바꾸거나 한 줄로 압축할 수 있나요?

네. “JSON 들여쓰기”에 다섯 가지가 있습니다 — 공백 2칸·4칸·8칸, 단계마다 탭 하나, 한 줄로 압축. 공백만 달라지며 데이터 자체는 어느 설정에서나 같습니다.

결과에서 루트 요소를 없앨 수 있나요?

“루트 감싸기”에서 고르면 됩니다. “루트 요소 제거”는 { "root": … } 대신 루트의 값만 돌려주고, “루트와 그 아래 한 단계 제거”는 한 단계 더 벗겨 <rows><row>a</row><row>b</row></rows>를 ["a","b"]로 만듭니다. 다만 루트 아래 단계에 키가 정확히 하나가 아니면 — 예를 들어 루트에 속성이 함께 있으면 — 하나를 고르는 순간 나머지가 사라지므로, 찾은 키 이름을 알려 주고 거절합니다.

파일을 열어서 변환할 수도 있나요?

네. .xml·.svg·.rss·.atom·.xsd·.xsl·.plist·.txt 파일을 5MB까지 열 수 있습니다. 더 큰 파일은 일부만 변환하지 않고 파일 크기와 한도를 알려 주며 거절합니다. 내려받는 이름은 연 파일을 따라가 orders.xml은 orders.json이 됩니다. 디스크에서 연 파일은 파일 열기 버튼 옆에서 고른 인코딩으로 읽습니다 — 자동, 또는 EUC-KR·Shift_JIS·GB18030·Big5를 포함한 열 가지 코드페이지.

웹 주소에서 XML을 불러올 수 있나요?

네. http:// 또는 https:// 주소를 넣고 “불러오기”를 누르면 됩니다. 요청은 브라우저가 직접 보내므로 이 사이트를 거치지 않지만, 그래서 못 불러오는 주소도 있습니다. 다른 사이트의 페이지가 읽는 것을 서버가 허용하지 않는 경우(CORS), 20초 안에 응답이 없는 경우, HTTP 오류 상태, 5MB를 넘는 본문, 빈 문서는 각각 이유를 밝히며 거절합니다. 주소 형태가 아닌 글자에는 https:// 를 임의로 붙이지 않고 거절합니다.

EUC-KR 피드도 한글이 안 깨지나요?

웹 주소로 불러온 문서라면 그렇습니다. 서버가 Content-Type 헤더에 선언한 charset을 먼저 따르고, 없으면 문서 자체의 <?xml encoding="…"?> 선언을 보며, 둘 다 없을 때만 UTF-8로 읽습니다. 디스크에서 연 파일은 파일 열기 버튼 옆에서 고른 인코딩으로 읽습니다 — 자동, 또는 EUC-KR·Shift_JIS·GB18030·Big5를 포함한 열 가지 코드페이지.

네임스페이스·CDATA·엔티티는 그대로 보존되나요?

네임스페이스 접두사는 키의 일부로 남아 <x:note>는 "x:note"가 되고, xmlns 선언 자체는 그 요소의 @attributes 안에 들어갑니다. CDATA 블록은 안의 텍스트가 그대로 읽히고, &amp; 같은 엔티티는 원래 문자로 복원됩니다.