CodeKitHub
JSON 도구

JSON ↔ XML 변환기

마지막 업데이트:

이 도구는 JSON을 XML로, XML을 JSON으로 양방향 변환하며 모든 처리가 브라우저 안에서 이루어집니다. 방향을 선택하고 데이터를 붙여넣으면 올바르게 중첩된 결과를 복사하거나 다운로드할 수 있습니다. 중첩된 객체는 중첩된 엘리먼트가 되고, 배열은 반복되는 형제 엘리먼트가 되며, XML 속성은 JSON에서 `@_name` 키로 매핑되어 왕복 변환에도 데이터가 손실되지 않습니다.

이 도구는 무엇인가요?

XML과 JSON은 둘 다 트리 형태의 데이터 형식이지만 쓰이는 곳이 다릅니다. 레거시 엔터프라이즈 API, SOAP 서비스, RSS/Atom 피드, 많은 설정 형식은 여전히 XML을 사용하는 반면, 현대의 REST API와 자바스크립트 코드는 거의 전적으로 JSON을 사용합니다. 이 도구는 둘 사이를 변환해주므로 오래된 시스템과 새 시스템을 연동할 때 어느 쪽도 직접 손으로 작성할 필요가 없습니다.

이 변환은 XML을 읽을 때는 브라우저 내장 DOMParser API를 바로 사용하고, XML을 생성할 때는 W3C XML 1.0 규격이 정의한 구조를 따릅니다. 그래서 생성되는 XML은 형식이 올바르고, 입력받는 XML도 브라우저나 표준을 준수하는 XML 라이브러리와 동일한 방식으로 파싱됩니다.

XML에는 JSON에 없는 개념(속성, 텍스트와 엘리먼트가 섞인 콘텐츠, 필수인 단일 루트 엘리먼트)이 있고, JSON에는 XML에 없는 개념(네이티브 배열, 불리언, 숫자)이 있습니다. 이 차이를 다루기 위해 이 도구는 널리 쓰이는 문서화된 규칙을 사용합니다. XML 속성 `name="value"`는 JSON 키 `"@_name": "value"`가 되고, 엘리먼트의 텍스트 내용은 자식이나 속성이 없으면 그 엘리먼트의 문자열 값 자체가 되거나, 속성이 있다면 `"#text"` 키로 표현되며, 같은 태그가 반복되는 형제 엘리먼트는 JSON 배열이 됩니다.

왜 사용해야 할까요?

  • 양방향 지원 — 같은 화면에서 JSON을 XML로, 또는 XML을 JSON으로 변환할 수 있습니다.
  • 중첩을 정확히 처리 — JSON 객체의 중첩은 어떤 깊이든 XML 엘리먼트의 중첩으로, 그 반대도 마찬가지로 정확히 변환됩니다.
  • 배열은 반복 엘리먼트로 매핑 — 키 아래의 JSON 배열은 같은 태그를 가진 여러 형제 XML 엘리먼트가 되고, 반복되는 XML 태그는 다시 JSON 배열로 돌아옵니다.
  • XML 속성 보존 — `@_속성명` 규칙을 사용해 속성 데이터가 조용히 사라지지 않습니다.
  • 클립보드 복사 또는 .json / .xml 파일로 다운로드할 수 있습니다.
  • 100% 클라이언트 측 처리 — 붙여넣은 어떤 데이터도 어디에도 업로드되지 않습니다.

사용 방법

  1. 방향을 선택하세요: "XML → JSON" 또는 "JSON → XML".
  2. 입력창에 데이터를 붙여넣으세요.
  3. "변환"을 클릭하세요.
  4. 결과를 확인한 뒤 복사하거나 "다운로드"를 눌러 파일로 저장하세요.

예시

입력

{"user":{"name":"Alice","age":30}}

결과

<?xml version="1.0" encoding="UTF-8"?>
<user>
  <name>Alice</name>
  <age>30</age>
</user>

JSON의 최상위 키가 하나("user")이므로 그대로 XML 루트 엘리먼트가 됩니다. 최상위 키가 여러 개라면 XML은 루트가 하나여야 하므로 도구가 전체를 <root> 엘리먼트로 감쌉니다.

실전 팁

  • 레거시 XML 설정(예: 오래된 앱의 설정 파일)을 현대적인 JSON 기반 시스템으로 마이그레이션할 때: XML을 붙여넣고 변환한 뒤 필요에 따라 필드 이름을 조정하세요.
  • 자바스크립트에서 SOAP나 XML-RPC 엔드포인트를 테스트할 때: 전송하기 전에 JSON 요청 페이로드를 여기서 XML로 변환하거나, XML 응답을 JSON으로 변환해 쉽게 확인하세요.
  • JSON에서 배열로 표현한 데이터를 XML에서는 반복 엘리먼트로 나타내고 싶다면, 먼저 배열을 하나의 키 아래에 중첩시키세요(예: {"items":{"item":[1,2,3]}}). XML은 루트 엘리먼트를 여러 개 가질 수 없으므로 최상위에 배열을 그대로 두면 안 됩니다.

@_ 속성 규칙이 중요한 이유

JSON과 XML 변환에서 가장 까다로운 부분은 XML 엘리먼트가 속성과 자식 콘텐츠라는 두 종류의 데이터를 동시에 가질 수 있다는 점입니다. 반면 일반 JSON 객체는 그냥 키와 값만 있습니다. 이를 구분할 규칙이 없다면 단순한 변환기는 속성을 완전히 잃어버리거나, 자식 엘리먼트와 뒤섞어서 나중에 신뢰성 있게 되돌릴 수 없게 만들 수 있습니다. `@_name` 접두사 규칙(자바스크립트 생태계에서 널리 채택된 라이브러리들도 사용하는 방식)은 속성에 명확하고 구분되는 키 형태를 부여해 이 문제를 해결합니다. 그 결과 `<product id="42">Widget</product>`는 id를 잃거나 어떤 값이 무엇인지 잘못 추측하는 일 없이 `{"product":{"@_id":"42","#text":"Widget"}}`로 깔끔하게 왕복 변환됩니다.

자주 묻는 질문

최상위 키가 여러 개인 JSON은 어떻게 되나요?

XML은 루트 엘리먼트가 하나여야 하므로, JSON 객체에 최상위 키가 여러 개라면(예: {"a":1,"b":2}) 출력은 <root> 엘리먼트로 감싸집니다: <root><a>1</a><b>2</b></root>. 최상위 키가 정확히 하나라면 그 키가 바로 루트 엘리먼트 이름이 됩니다.

XML 속성은 JSON에서 어떻게 표현되나요?

<user id="7">처럼 속성이 있다면 결과 JSON 객체에서 "@_id": "7" 키가 됩니다. 이는 fast-xml-parser 같은 라이브러리에서 사용하는 흔하고 문서화된 규칙으로, 속성을 자식 엘리먼트와 구분되도록 유지해줍니다.

XML에서 같은 엘리먼트가 반복되면 JSON 배열이 되나요?

네. 하나의 엘리먼트 안에 같은 태그 이름을 가진 자식이 여러 개 있다면, 예를 들어 <items><item>1</item><item>2</item></items>는 JSON으로 변환하면 {"items":{"item":["1","2"]}}가 됩니다. 이 JSON을 다시 XML로 변환하면 반복되는 <item> 엘리먼트가 그대로 재현됩니다.

XML을 JSON으로 변환할 때 숫자나 불리언 값도 그대로 유지되나요?

XML에는 숫자나 불리언이라는 네이티브 개념이 없어서 모든 것이 텍스트로 취급됩니다. 그래서 텍스트 내용은 JSON 문자열로 표현됩니다(예: 30이 아니라 "30"). 숫자 타입이 필요하다면 변환 후 해당 필드를 직접 변환해야 합니다.

제 데이터가 어딘가에 업로드되나요?

아니요. 파싱과 변환 모두 브라우저 내장 DOMParser API를 사용해 자바스크립트로 브라우저 안에서 처리됩니다. 서버로 전송되는 데이터가 전혀 없으므로 비공개 설정 파일이나 내부 API 페이로드에도 안전하게 사용할 수 있습니다.

관련 도구