ToolActToolAct

JSON to XML 변환 도구

JSON 입력
XML 출력
줄 수: 1문자 수: 0바이트 수: 0
줄 수: 1문자 수: 0바이트 수: 0

JSON to XML 변환이란?

JSON to XML 변환은 JSON(JavaScript Object Notation) 데이터를 XML(eXtensible Markup Language) 형식으로 변환하는 것입니다. 서로 다른 데이터 형식을 사용하는 시스템 통합, 레거시 XML API 작업, 설정 파일, 데이터 교환 또는 문서 저장에 XML이 필요할 때 유용합니다. 배열, 숫자 타입, 빈 값, 속성 표현처럼 JSON과 XML의 구조 차이가 있는 항목은 변환 규칙을 확인해야 하며, 실제 시스템 연동 전 샘플 데이터로 검증하는 것이 안전합니다.

사용 방법

사용 방법

  1. 왼쪽 입력란에 JSON 데이터를 붙여넣거나 입력하세요
  2. 선택적으로 루트 요소 이름을 사용자 지정하세요
  3. 들여쓰기 크기를 선택하세요 (2칸, 4칸 또는 Tab)
  4. 변환된 XML이 오른쪽에 구문 강조와 함께 표시됩니다
  5. 복사 또는 다운로드를 클릭하여 결과를 저장하세요

변환 확인사항

  • 변환 후 배열, null 값, 속성 유사 필드를 검토하세요. JSON과 XML은 데이터를 완전히 같은 방식으로 모델링하지 않습니다.
  • XML을 API 요청, 구성 파일 또는 테스트 픽스처에 복사하기 전에 안정적인 루트 요소 이름을 선택하세요.

활용 사례

XML 전용 연동을 위해 JSON 페이로드 변환하기일부 레거시 엔드포인트, 가져오기 작업, 벤더 시스템은 소스 데이터가 JSON이더라도 여전히 XML을 요구합니다. 이 변환기는 루트 요소를 선택할 수 있고, 반복되는 배열 값을 반복 item 노드로 보존하며, XML 민감 문자를 출력 전에 이스케이프합니다. SOAP 요청 엔벨로프, EDI 테스트 픽스처, 아직 JSON으로 마이그레이션하지 않은 파트너 페이로드의 출발점으로 활용하세요.
구조화된 데이터에서 읽기 좋은 XML 예제 만들기들여쓰기 옵션을 사용하면 중첩된 JSON 샘플을 문서, 티켓, 계약 논의에 적합할 만큼 깔끔한 XML로 변환합니다. 유효하지 않거나 비어 있는 루트 이름도 방어적으로 처리되어 간단한 실험이 이름 실수로 실패하지 않습니다. 들여쓰기된 형태는 코드 리뷰에서 단일 줄 압축 버전보다 diff가 쉽습니다.
XML을 수동 편집하기 전에 엣지 케이스 테스트하기null 값, 빈 객체, 빈 배열, 기본 타입 배열, 중첩 레코드는 각각 다른 XML 구조를 생성합니다. 변환기에 먼저 샘플을 통과시키면 매퍼, SOAP 클라이언트, 가져오기 템플릿에 붙여넣기 전에 해당 선택지를 시각화할 수 있습니다. 스키마가 변경될 때마다 변환을 반복하여 XML이 JSON 계약과 동기화된 상태를 유지하세요.
JSON 필드를 속성 또는 자식 요소로 의도적으로 매핑하기어떤 키를 속성으로, 어떤 키를 자식 요소로 만들지 선택하세요. 일부 레거시 스키마는 ID 유사 필드를 속성으로, 설명을 요소로 취급합니다. 매핑을 변경할 때마다 다시 실행하여 필수 속성 순서와 네임스페이스 접두사가 기대하는 XSD와 일치하는지 확인하세요. XML 문서에서 속성 순서는 의미론적으로 중요하지 않지만, 요소 순서는 XSD 시퀀스에서 요구될 수 있습니다.
파트너의 XSD로 결과 검증하기변환 후 XML을 xmllint --schema나 온라인 XSD 검증기에 넣어 누락된 필수 요소, 잘못된 타입, 변환기만으로는 강제할 수 없는 순서 규칙을 잡아내세요. 잘-formed된 XML 문서가 다운스트림 파트너가 수락하는 문서와 같은 것은 아니며, 속성 대 요소 선택에 따라 XSD가 필수로 판단하는 필드가 달라질 수 있습니다. JSON 또는 변환 규칙을 반복하여 검증기가 깨끗한 일치를 보고할 때까지 조정한 후 페이로드를 승인하세요.

기술 원리

JSON(RFC 8259, JavaScript 객체 리터럴에서 파생)과 XML(W3C XML 1.0, 1998년 제정)은 모두 트리 구조의 직렬화 형식이지만 문법이 다릅니다. JSON에는 객체(문자열 키를 가진 키/값 맵), 배열(순서 있는 목록), 6가지 스칼라 타입(문자열, 숫자, 불리언, null, 구조 타입)이 있습니다. XML에는 요소(시작/종료 태그 쌍으로 텍스트나 하위 요소를 감싸는 것), 속성(시작 태그의 이름/값 쌍), 텍스트 노드, 주석, 처리 지시문, CDATA 섹션이 있습니다. 변환은 표준 답이 없는 구조적 변환이며, 기존의 모든 규칙(BadgerFish, JSONML, SOAP/RPC 인코딩, OOXML의 평면 스키마, XBRL의 linkbase 형식)은 같은 입력에 대한 서로 다른 규칙입니다.<br /><br />'속성 대 하위 요소' 결정이 핵심 모호성입니다. JSON의 유일한 메타데이터는 키 이름에 존재하므로, `{"id": "42", "name": "Alice", "admin": true}` 같은 JSON 객체는 어떤 키가 '메타데이터'이고 어떤 키가 '데이터'인지 명시하지 않습니다. 세 가지 일반적인 규칙: (1) 이 페이지의 기본값 — 스칼라는 텍스트 콘텐츠가 되고, 중첩 속성 백(값이 모두 스칼라인 배열이 아닌 객체로 인식)의 원래 JSON 키는 `@` 접두사가 붙은 XML 속성이 됩니다(BadgerFish 규칙). (2) JSONML — 모든 JSON 객체는 'tag' 키를 요소 이름으로, 'attr' 키를 속성 맵으로, 하위 항목을 자식으로 가지는 요소가 됩니다. (3) oData/Atom — JSON 객체는 요소가 되고 배열은 배열 이름 래퍼 요소로 인라인됩니다. 각 규칙은 특정 다운스트림 소비자에게는 증명 가능하게 올바르고 다른 소비자에게는 증명 가능하게 틀리기 때문에, XML 변환기가 보편적으로 수락된 적이 없습니다.<br /><br />배열은 두 번째 모호성입니다. JSON 배열은 순서 있는 목록이고, XML에는 네이티브 배열 타입이 없습니다. 세 가지 표준 해결책: (a) 하위 요소를 반복(이 페이지의 기본값, OOXML/SOAP 규칙): `[1, 2, 3]` → `<root><item>1</item><item>2</item><item>3</item></root>`. (b) 컨테이너로 래핑: `<root><items><item>1</item>...</items></root>`. (c) 배열을 단일 구분 문자열로 인코딩하고 구분자를 문서화(CSV-in-XML, 소비자가 파싱할 때만). 각각은 다른 다운스트림 XSD에 대해 올바르며, 변환 단계는 어떤 것을 출력할지 알아야 합니다.<br /><br />XML 요소 이름은 유효한 QName 토큰이어야 합니다(XML 1.0 §2.3 / XML Namespaces 1.0 §3): 문자, 밑줄 또는 콜론으로 시작한 다음 문자, 숫자, 하이픈, 밑줄, 마침표 또는 콜론이 옵니다. JSON은 '123'이나 'first name' 같은 키를 허용하는데 이것이 이를 위반합니다 — 변환기는 이름을 변경(slugify하여 first_name으로, _ 접두사 추가)하거나 실패해야 합니다. JSON 문자열 콘텐츠도 요소 텍스트와 속성 값에서 엔티티 이스케이프가 필요합니다: `&` → `&amp;`, `<` → `&lt;`, `>` → `&gt;`(오래된 XML의 텍스트에서만 필수이지만 항상 안전), `"` → `&quot;`, `'` → `&apos;`(속성에서), 인코딩 범위 밖의 문자는 `&#xHHHH;`로 표현합니다. 5가지 내장 엔티티와 숫자 문자 참조는 XML에서 필수이며, HTML의 추가 명명 엔티티(`&nbsp;`, `&copy;`)는 일반 XML에서 정의되지 않으므로 사용하려면 명시적 DOCTYPE이 필요합니다.<br /><br />출력 문서에는 프롤로그와 네임스페이스 선언도 필요합니다: `<?xml version="1.0" encoding="UTF-8"?>`가 먼저 오고, 그 다음에 xmlns 선언이 옵니다. 대상 시스템이 네임스페이스를 사용하면(SOAP는 `http://www.w3.org/2003/05/soap-envelope`, XSLT는 `http://www.w3.org/1999/XSL/Transform`), 접두사 매핑은 루트 요소의 `xmlns:prefix="uri"` 속성으로 추가됩니다. JSON에는 네임스페이스 개념이 없으므로 사용할 URI의 선택은 프로젝트별입니다. 빈 값의 경우, JSON null은 일반적으로 `<key xsi:nil="true"/>`(XML 스키마 규칙) 또는 `<key></key>`(빈 요소 규칙)로 표현됩니다. 변환기는 하나를 선택하며, 정답은 소비자의 XSD 검증에 따라 다릅니다.<br /><br />역방향(XML → JSON)의 경우, 같은 모호성이 반대로 적용됩니다: 속성은 BadgerFish에서 `@attributes` 키로 매핑되고, CDATA는 `$` 또는 `#text` 키로 매핑되며, 혼합 콘텐츠 요소(텍스트 + 하위 요소가 교차)는 깔끔한 JSON 표현이 없어 보통 문자열 연결로 출력됩니다. 실전 변환기는 항상 '속성 키', '텍스트 키', '배열 래퍼' 옵션을 노출합니다 — 이를 피할 방법은 없습니다.

  • JSON(RFC 8259)과 XML(W3C XML 1.0, 1998년)은 모두 트리 구조의 직렬화 형식이며, 변환은 표준 답이 없는 구조적 변환이므로 같은 입력에 대해 여러 규칙(BadgerFish, JSONML, SOAP, OOXML)이 공존합니다.
  • 속성 대 하위 요소: 스칼라는 기본적으로 텍스트 콘텐츠가 되고, 중첩 속성 백 객체(값이 모두 스칼라)는 @ 접두사 속성이 됩니다(BadgerFish). JSONML은 'tag'/'attr' 키를 사용하고, oData/Atom은 래퍼 요소를 사용합니다.
  • 배열: 이 페이지의 기본값은 하위 요소를 반복하는 것입니다(OOXML/SOAP 규칙). 대안: 컨테이너 요소로 래핑하거나 구분 문자열로 인코딩. JSON의 배열 순서는 XML 출력에서 보존됩니다.
  • XML 요소 이름 규칙: 문자, 밑줄 또는 콜론으로 시작해야 하며, 그 다음은 문자/숫자/하이픈/밑줄/마침표/콜론이 옵니다(XML 1.0 §2.3). '123'이나 'first name' 같은 JSON 키는 유효하지 않은 XML 이름이므로 slugify하거나 거부해야 합니다.
  • 엔티티 이스케이프: `&` → `&amp;`, `<` → `&lt;`, `>` → `&gt;`, `"` → `&quot;`, `'` → `&apos;`, 기타 인코딩 문자는 `&#xHHHH;`로. 5가지 내장 엔티티는 필수이며, `&nbsp;` 같은 HTML 추가 항목은 명시적 DOCTYPE이 필요합니다.
  • 문서 프롤로그: `<?xml version="1.0" encoding="UTF-8"?>`이 표준 첫 줄입니다. 루트 요소의 xmlns 선언이 네임스페이스 접두사를 선언하며, JSON에는 네임스페이스 개념이 없으므로 변환기가 프로젝트별로 선택합니다.
  • JSON null → XML: `<key xsi:nil="true"/>`(XML 스키마 규칙) 또는 `<key></key>`(빈 요소). 선택은 소비자의 XSD와 일치해야 하며, 그렇지 않으면 검증이 실패합니다.
  • 역방향 XML → JSON에도 같은 모호성이 있습니다: CDATA 섹션은 `$` 또는 `#text` 키가 되고(BadgerFish), 혼합 콘텐츠 요소(텍스트 + 하위 요소가 교차)는 깔끔한 JSON 형태가 없어 보통 문자열로 연결됩니다.

예시

객체 -> 엘리먼트

{"name": "Alice"}
->
&lt;root>
  &lt;name>Alice&lt;/name>
&lt;/root>

배열 -> 엘리먼트

[1, 2, 3]
->
&lt;root>
  &lt;item>1&lt;/item>
  &lt;item>2&lt;/item>
  &lt;item>3&lt;/item>
&lt;/root>

중첩 구조

{"user": {"name": "Alice", "age": 25}}
->
&lt;root>
  &lt;user>
    &lt;name>Alice&lt;/name>
    &lt;age>25&lt;/age>
  &lt;/user>
&lt;/root>

자주 묻는 질문

변환기는 JSON을 XML로 어떻게 매핑하나요?

각 JSON 객체는 하나의 XML 요소가 됩니다. 객체의 키는 자식 요소 이름이 되고, 원시 값은 요소 텍스트가 됩니다. 배열은 같은 부모 요소를 여러 번 반복하는 형태가 되며, 텍스트의 특수 문자는 이스케이프됩니다(& → &amp;, < → &lt;).

JSON에서 XML로의 변환이 항상 무손실은 아닌 이유가 뭔가요?

JSON에는 number/boolean/null이라는 명시적 타입이 있지만 XML에는 텍스트만 있습니다. JSON은 공백이나 특수 문자가 들어간 키를 허용하지만 XML 요소 이름은 그렇지 않으며, 최상위에 배열이 있어도 XML로는 자연스럽게 옮길 수 없습니다. 이 페이지는 휴리스틱(루트 래퍼 요소, 잘못된 키 정리 등)으로 이러한 간극을 메웁니다.

배열 값은 XML에서 어떻게 표현되나요?

각 배열 요소가 같은 이름의 형제 요소가 됩니다. [{a:1},{a:2}] → <items><item><a>1</a></item><item><a>2</a></item></items>가 되는 식입니다. 래핑 방식은 설정 가능하며, 일부 페이지는 단수형 요소 이름을 직접 지정할 수 있습니다.

유효한 XML 이름이 아닌 JSON 키는 어떻게 되나요?

XML 요소 이름은 숫자로 시작할 수 없고 공백이나 특정 기호를 포함할 수 없습니다. 이 페이지는 잘못된 문자를 밑줄로 바꾸거나 CDATA로 감싸서 정리합니다. 결과는 유효한 XML이지만, 왕복 변환은 정확히 일치하지 않습니다.

JSON의 null과 boolean은 보존되나요?

null은 설정에 따라 빈 요소가 되거나 요소 자체가 생략됩니다. true/false는 그대로 'true' 또는 'false'라는 텍스트가 됩니다. 이런 타입에 대한 XML 표준이 없으므로, 다운스트림 파서가 자체적으로 타입 해석을 적용해야 합니다.

XML 속성도 추가할 수 있나요?

JSON에는 속성 개념이 없어서, 생성기는 기본적으로 모든 것을 요소로 출력합니다. 일부 변환기는 '@id' 같은 특수 키 접두사로 속성을 표시하므로, XML 스키마상 속성 출력이 중요하다면 페이지 옵션을 확인하세요.

변환은 로컬에서 이루어지나요?

네. JSON 파싱과 XML 생성 모두 브라우저 안에서 일어나며, 입력은 업로드되지 않습니다.