JSON XML 변환기
브라우저에서 JSON과 XML을 상호 변환. 한글 키 이름은 그대로 요소 이름이 되고, 빈 배열·중첩 배열·XML 속성·혼합 텍스트는 위치를 알려 주고 변환을 멈춥니다.
- 브라우저에서 처리
- 데이터가 브라우저 밖으로 나가지 않습니다
- 무료 · 회원가입 불필요
WeChat으로 스캔하여 공유
예시·자세한 설명·자주 묻는 질문 실제 출력이 있는 예시, 다른 도구와의 차이, 자주 묻는 질문.
변환 예시
한글 키 이름
XML 1.0 이름에는 한글도 쓸 수 있으므로 키 이름이 그대로 요소 이름이 됩니다. 텍스트 안의 <와 &는 이스케이프됩니다.
{"주문": {"주문번호": "K-2026-0042", "받는분": "홍길동", "요청사항": "문 앞 & 경비실"}}
<?xml version="1.0" encoding="UTF-8"?>
<root>
<주문>
<주문번호>K-2026-0042</주문번호>
<받는분>홍길동</받는분>
<요청사항>문 앞 & 경비실</요청사항>
</주문>
</root>
배열, null, 빈 객체
배열은 키 이름의 요소를 반복하고, 최상위 배열은 item을 씁니다. null과 {}는 모두 빈 요소가 됩니다.
{"상품": [{"이름": "키보드", "수량": 1}, {"이름": "마우스", "수량": 2}], "쿠폰": null, "옵션": {}}
<?xml version="1.0" encoding="UTF-8"?>
<root>
<상품>
<이름>키보드</이름>
<수량>1</수량>
</상품>
<상품>
<이름>마우스</이름>
<수량>2</수량>
</상품>
<쿠폰></쿠폰>
<옵션></옵션>
</root>
JSON → XML이 멈추는 경우
XML에 맞추려고 키 이름을 바꾸거나 데이터를 버리지 않습니다. XML을 출력하지 않고 처음으로 변환할 수 없는 위치를 보여 줍니다.
{"우편 번호": "04524"}은XML로 변환할 수 없습니다: $["우편 번호"]: 이 이름은 XML 요소 이름으로 사용할 수 없습니다.XML 이름에는 공백을 넣을 수 없고 숫자로 시작할 수도 없습니다.:가 들어간 이름도 접두사에 필요한 네임스페이스 선언을 쓸 수 없어 멈춥니다.{"좌표": [[126.98, 37.57], [129.08, 35.18]]}은XML로 변환할 수 없습니다: $["좌표"][0]: 빈 배열과 중첩 배열은 반복 XML 요소로 표현할 수 없습니다.{"태그": []}는XML로 변환할 수 없습니다: $["태그"]: 빈 배열과 중첩 배열은 반복 XML 요소로 표현할 수 없습니다.
XML → JSON
<응답>
<결과코드>00</결과코드>
<항목>
<지역>서울</지역>
<기온>18.0</기온>
</항목>
<항목>
<지역>부산</지역>
<기온>21.5</기온>
</항목>
</응답>
보기 좋게 출력을 켜면 다음과 같습니다.
{
"응답": {
"결과코드": "00",
"항목": [
{
"지역": "서울",
"기온": "18.0"
},
{
"지역": "부산",
"기온": "21.5"
}
]
}
}
결과코드의 00과 18.0은 문자열이라 앞뒤의 0이 그대로 남습니다.
XML → JSON이 멈추는 경우
<응답><항목 순번="1">…</항목></응답>은JSON으로 변환할 수 없습니다: /응답/항목[1]/@순번: 현재 JSON 변환 규칙으로 XML 속성을 표현할 수 없습니다.<안내>배송은 <b>3일</b> 걸립니다</안내>는JSON으로 변환할 수 없습니다: /안내: 현재 JSON 변환 규칙으로 텍스트와 자식 요소의 혼합을 표현할 수 없습니다.
위치의 번호는 같은 이름의 요소를 1부터 센 값으로, 항목[2]는 부모 요소 아래 두 번째 항목입니다.
제한
- XML → JSON 값은 모두 문자열입니다. XML에는 숫자·불리언 타입이 없어
<수량>2</수량>는“2”가 됩니다. 빈 요소는""가 되므로 JSON의null과{}는 왕복하면""가 됩니다. - 자식 요소가 하나인지 여럿인지에 따라 모양이 달라집니다.
항목이 하나면 객체, 둘 이상이면 배열입니다. JSON을 읽는 코드는 두 경우를 모두 처리해야 합니다. - 자식 요소가 없는 요소의 텍스트는 그대로 유지됩니다. 앞뒤 공백과 줄바꿈도 포함합니다. 무시하는 것은 자식 요소 사이의 공백뿐입니다. 주석과 처리 명령은 건너뜁니다.
- 속성, 네임스페이스 선언, 혼합 텍스트는 변환을 멈춥니다(위 참고).
@id같은 속성용 키로 바꾸는 기능은 없습니다. - XML 문법 오류는 브라우저 파서의 메시지라서 Chrome, Firefox, Safari마다 문구가 다릅니다. 변환 없이 XML을 정렬·압축하려면 XML 포매터를 쓰세요.
JSON vs XML
JSON은 REST API와 웹 서비스에서 널리 쓰이는 데이터 형식으로 간결하고 읽기 쉬우며 모든 언어에서 다룰 수 있습니다. XML은 엔터프라이즈 시스템, SOAP API, 설정 파일(Maven, Spring), 문서 형식(SVG, XHTML, RSS)에서 여전히 널리 사용됩니다. 형식이 다른 시스템을 연결할 때 같은 데이터가 다른 형식에서 어떻게 보이는지, 어떤 구조가 대응되지 않는지 이 도구로 확인할 수 있습니다.
FAQ
JSON → XML 변환 규칙은 무엇인가요?
객체의 각 키는 같은 이름의 자식 요소가 되고 값은 텍스트가 됩니다. 배열은 같은 이름의 요소를 반복하고, null과 빈 객체는 빈 요소가 됩니다. 키가 XML 이름으로 쓸 수 없거나 배열이 비어 있거나 중첩되어 있으면 XML을 출력하지 않고 첫 문제의 위치(예: $["m"][0])를 표시합니다.
XML → JSON 변환 규칙은 무엇인가요?
브라우저 내장 DOMParser로 XML을 파싱합니다. 자식 요소가 없는 요소는 문자열, 자식 요소는 객체의 키가 되고, 같은 이름의 형제 요소는 배열로 묶습니다. 루트 요소 이름이 최상위 키입니다. 자식 요소 사이의 공백은 무시하고, 주석은 건너뛰며, CDATA는 텍스트로 취급합니다.
루트 요소 옵션은 무엇인가요?
XML은 모든 내용을 감싸는 루트 요소 하나가 필요합니다. JSON → XML에서 이 이름(기본값: root)을 사용하며, 올바른 XML 이름이어야 합니다. "123 data" 같은 이름이면 변환이 멈춥니다. XML → JSON에서는 이 옵션을 쓰지 않고 실제 루트 요소 이름을 사용합니다.
XML 속성은 지원되나요?
지원하지 않지만 조용히 버리지도 않습니다. XML → JSON은 첫 속성에서 멈추고 위치(예: /catalog/book[1]/@id)를 표시합니다. 네임스페이스 선언(xmlns, xmlns:x)도 속성입니다. 변환하려면 먼저 속성을 자식 요소로 바꾸세요. JSON → XML은 속성을 만들지 않습니다.
데이터가 서버로 전송되나요?
아닙니다. 모든 변환은 브라우저에서 처리되며 데이터는 기기 밖으로 나가지 않습니다.