JSON to XML 변환기
JSON을 붙여넣으면 즉시 XML로 변환됩니다. 객체, 배열, @_ 속성을 브라우저에서 변환 — 업로드 없음. 무료, 개인 정보 보호, 회원가입 불필요.
옵션 · 2칸 · JSON → XML
JSON-to-XML 변환이란 무엇이며 어떻게 작동하나요?
JSON(JavaScript Object Notation)과 XML(Extensible Markup Language)은 모두 구조화된 데이터 형식이지만 근본적으로 다른 모델을 가집니다: JSON은 속성이나 문서 루트 제약 개념이 없는 객체, 배열, 문자열, 숫자, 불리언, null 값의 트리이고, XML은 속성과 텍스트 내용을 포함하는 요소의 트리로 문서에 정확히 하나의 루트 요소가 있어야 합니다. JSON에서 XML로 변환하려면 이 불일치를 해소하기 위한 관례가 필요합니다.
이 도구는 fast-xml-parser(Node.js), xmltodict(Python), JAXB(Java)에서 사용하는 것과 동일한 가장 널리 채택된 관례를 역방향으로 적용합니다:
**1. 루트 요소 정규화.** JSON과 XML의 가장 중요한 차이는 루트 제약입니다. JSON에는 루트 개념이 없지만 XML은 정확히 하나를 요구합니다. 변환기는 네 가지 경우를 자동으로 처리합니다. 단일 키 객체는 해당 키를 XML 루트로 사용합니다: { "config": {...} }는
**2. @_ 접두사 → XML 속성.** @_ 접두사가 붙은 JSON 키는 포함하는 요소의 XML 속성이 됩니다. { "element": { "@_id": "42", "@_class": "primary" } }는
**3. #text → 요소 텍스트 내용.** 요소에 속성과 텍스트 내용이 모두 필요할 때 텍스트는 #text 키 아래에 저장됩니다: { "price": { "@_currency": "USD", "#text": "29.99" } }는
**4. 배열 → 반복되는 같은 이름의 형제 요소.** XML은 같은 이름을 가진 여러 자식 요소를 허용하고, JSON은 정렬된 목록에 배열을 사용합니다. 키 아래의 JSON 배열은 키 이름을 재사용하는 반복 자식 요소를 생성합니다: { "items": ["a", "b"] }는 부모 아래에 형제인
**5. XML-to-JSON과 대칭.** 여기서 사용하는 @_와 #text 관례는 동반 도구인 XML to JSON 변환기에서 사용하는 관례와 정확히 동일합니다. 즉 JSON → XML → JSON 왕복 변환은 입력 JSON이 @_/#text 관례를 따르는 한 속성, 텍스트 내용, 요소 구조를 보존합니다.
**언제 JSON을 XML로 변환하나요?** 가장 일반적인 시나리오는: (1) XML 요청 본문을 요구하는 레거시 SOAP 또는 XML 기반 웹 서비스에 데이터 전송; (2) JSON 데이터에서 XML 설정 파일(Spring, Maven, Ant, Android 리소스) 생성 또는 변환; (3) JSON 콘텐츠 데이터에서 sitemap.xml 또는 RSS 피드 XML 생성; (4) XML을 소비하는 기업 시스템(ERP, CRM, EDI)과의 상호 운용; (5) JSON 데이터에서 SVG 또는 기타 XML 기반 그래픽 형식을 프로그래밍 방식으로 생성. 생성된 XML을 포맷팅하고 유효성 검사하려면 XML 포맷터를 사용하세요.
// Convert JSON to XML in Node.js using fast-xml-parser
import { XMLBuilder } from 'fast-xml-parser';
const data = {
catalog: {
product: {
'@_id': 'P01',
'@_category': 'electronics',
name: 'Wireless Headphones',
price: {
'@_currency': 'USD',
'#text': '79.99'
}
}
}
};
const builder = new XMLBuilder({
attributeNamePrefix: '@_', // @_ keys become XML attributes
textNodeName: '#text', // #text key becomes element text content
ignoreAttributes: false, // process @_ attribute keys
format: true, // pretty-print with indentation
indentBy: ' ', // 2-space indent
});
const xml = builder.build(data);
console.log(xml);
// <catalog>
// <product id="P01" category="electronics">
// <name>Wireless Headphones</name>
// <price currency="USD">79.99</price>
// </product>
// </catalog> 주요 기능
실시간 변환
JSON을 입력하거나 붙여넣으면 XML 출력이 즉시 업데이트됩니다 — 변환 버튼이 필요 없습니다. 대용량 입력(>200KB)은 자동으로 수동 모드로 전환하여 브라우저 응답성을 유지합니다.
자동 루트 정규화
XML은 정확히 하나의 루트 요소를 요구합니다. 단일 키 객체는 해당 키를 루트로 사용하고, 다중 키 객체는
@_ 속성 및 #text 관례
@_ 접두사가 붙은 키는 XML 속성이 되고, #text 키는 요소의 텍스트 내용이 됩니다. fast-xml-parser와 xmltodict 관례와 일치하여 출력이 동반 XML to JSON 변환기와 대칭적으로 동작합니다.
배열에서 반복 요소로
키 아래의 JSON 배열은 키 이름을 재사용하는 반복 자식 요소를 생성합니다 — 단수화 없음. { "items": [1, 2, 3] }는 세 개의
100% 브라우저 기반 개인 정보 보호
모든 변환은 JavaScript를 사용하여 브라우저에서 로컬로 실행됩니다. 자격 증명, 내부 설정, 민감한 페이로드를 포함한 JSON은 어떤 서버로도 전송되지 않고, 기록되지 않으며, 저장되지 않습니다.
XML to JSON과 대칭 왕복 변환
@_와 #text 관례는 동반 XML to JSON 변환기와 공유됩니다. JSON → XML → JSON 왕복 변환은 속성, 텍스트 내용, 중첩 구조를 충실히 보존합니다.
예시
API 응답 객체
{"user":{"id":42,"name":"Alice Kim","email":"alice@example.com","role":"admin","address":{"city":"Seoul","country":"KR"}}} 최상위 키가 XML 루트 요소가 되는 단일 키 JSON 객체입니다. 중첩된 address 객체는
최상위 배열
[{"id":1,"name":"Widget A","price":9.99},{"id":2,"name":"Widget B","price":14.99},{"id":3,"name":"Widget C","price":4.49}] 전체 입력이 JSON 배열(객체로 감싸지지 않은)인 경우 변환기는
속성과 텍스트 내용이 있는 객체
{"catalog":{"product":{"@_id":"P01","@_category":"electronics","name":"Wireless Headphones","price":{"@_currency":"USD","#text":"79.99"}}}} @_ 접두사가 붙은 키는 요소의 XML 속성이 됩니다: @_id는
사용 방법
- 1
JSON 붙여넣기
위 입력 필드에 JSON 데이터를 입력하거나 붙여넣으세요. '예시 불러오기'를 클릭하여 샘플을 사용해 볼 수도 있습니다 — API 응답 객체, 배열 페이로드, @_ 속성과 #text를 사용하는 객체.
- 2
실시간 XML 출력 확인
XML이 즉시 출력 패널에 표시됩니다. 단일 키 객체는 해당 키를 루트로 사용하고, 다중 키 객체는
로 감싸지며, @_ 접두사가 붙은 키는 속성이 되고, 배열은 반복 자식 요소가 됩니다. 필요에 따라 들여쓰기(2칸 또는 4칸)를 조정하세요. - 3
복사 또는 다운로드
복사를 클릭하여 XML을 클립보드에 저장하거나 다운로드를 클릭하여 .xml 파일로 저장하세요. 결과를 유효성 검사하거나 재포맷하려면 XML 포맷터에 붙여넣으세요.
일반적인 변환 함정
다중 키 객체에 예상치 않은 감싸기
최상위 JSON에 여러 키가 있으면 출력이 모두
// Input: { "status": 200, "data": { "id": 1 } }
// Output: <root><status>200</status><data><id>1</id></data></root>
// Root is <root> — may not match your schema // Wrap in a named key to control the root element
// Input: { "response": { "status": 200, "data": { "id": 1 } } }
// Output: <response><status>200</status><data><id>1</id></data></response> 최상위 배열에 - 감싸기
최상위 JSON 배열에는 요소 이름이 없으므로
// Input: [{ "id": 1 }, { "id": 2 }]
// Output: <root><item><id>1</id></item><item><id>2</id></item></root>
// Tag names are generic // Wrap in a named key for meaningful tag names
// Input: { "products": [{ "id": 1 }, { "id": 2 }] }
// Output: <root><products><id>1</id></products><products><id>2</id></products></root>
// Each array element reuses the key name "products" as its tag 속성 키에 @_ 접두사 누락
XML 속성을 생성하려면 JSON 키에 @_ 접두사가 붙어야 합니다. 접두사 없이는 키가 속성이 아닌 자식 요소로 처리됩니다.
// Input: { "tag": { "id": "42", "name": "Alice" } }
// Output: <tag><id>42</id><name>Alice</name></tag> ← id is a child element // Use @_ prefix for attributes
// Input: { "tag": { "@_id": "42", "name": "Alice" } }
// Output: <tag id="42"><name>Alice</name></tag> ← id is an attribute 속성과 텍스트가 모두 있는 요소 — #text 누락
요소에 XML 속성과 텍스트 내용이 모두 필요하다면 텍스트에 #text 키를 사용해야 합니다. 없으면 텍스트가 들어갈 곳이 없어 요소가 비어 있거나 오류가 발생합니다.
// Input: { "price": { "@_currency": "USD", "value": "29.99" } }
// Output: <price currency="USD"><value>29.99</value></price>
// Text is a child element, not text content // Use #text for element text content
// Input: { "price": { "@_currency": "USD", "#text": "29.99" } }
// Output: <price currency="USD">29.99</price> ← text content XML에서 유효하지 않은 문자가 포함된 JSON 키
XML 요소 이름은 숫자로 시작할 수 없으며 공백, 콜론(네임스페이스 접두사 제외), 대부분의 특수 문자를 포함할 수 없습니다. JSON 키에 이러한 문자가 포함된 경우 출력 XML이 잘못된 형식이 됩니다. 변환 전에 문제가 있는 키 이름을 바꾸거나 후처리 단계에서 정리하세요.
// JSON key starts with digit — invalid XML element name
// Input: { "1stItem": "value" }
// Output: <1stItem>value</1stItem> ← invalid XML // Use a valid XML element name
// Input: { "firstItem": "value" }
// Output: <firstItem>value</firstItem> ← valid XML 값의 특수 문자가 이스케이프되지 않음
XML 텍스트 내용에는 원시 <, >, &, " 문자를 포함할 수 없습니다 — <, >, &, "로 이스케이프되어야 합니다. 변환기는 요소 텍스트 내용과 속성 값에서 이러한 문자를 자동으로 이스케이프합니다. 다운스트림 처리가 이중으로 이스케이프한다면 XML 파서가 이미 이스케이프된 내용을 재이스케이프하는 것이 아닌 원시 XML 바이트를 소비하는지 확인하세요.
// JSON: { "query": "name = 'Alice' & role = 'admin'" }
// Converter outputs: <query>name = 'Alice' & role = 'admin'</query>
// If double-processed: &amp; — consumer is re-escaping // Converter output is correct — consume it as XML, not as a raw string // <query>name = 'Alice' & role = 'admin'</query> // XML parser decodes to: name = 'Alice' & role = 'admin'
주요 사용 사례
- SOAP 및 레거시 XML 웹 서비스 호출
- 애플리케이션에서 JSON 페이로드를 빌드하고 XML로 변환한 다음 SOAP 엔드포인트에 POST하세요. 이렇게 하면 XML 문자열을 수동으로 작성하지 않아도 되며 레거시 서비스에 직렬화가 필요한 순간까지 네이티브 JSON 구조로 데이터를 처리할 수 있습니다.
- XML 설정 파일 생성
- Spring, Maven, Ant, Tomcat, Android는 모두 XML 설정 형식을 사용합니다. 설정 데이터를 JSON으로 생성하거나 변환하여 — diff와 버전 관리가 더 쉬움 — 배포를 위해 XML로 변환하세요.
- 사이트맵 및 RSS 피드 XML 생성
- 콘텐츠 관리 시스템과 정적 사이트 생성기는 종종 페이지 메타데이터를 JSON으로 저장합니다. 해당 메타데이터를 sitemap.xml 또는 RSS 피드 XML로 변환하여 검색 엔진에 제출하거나 피드 리더에 콘텐츠를 신디케이션하세요.
- 기업 데이터 통합 (EDI / ERP / CRM)
- ERP 시스템(SAP, Oracle), CRM 플랫폼, EDI 네트워크는 일반적으로 XML로 데이터를 교환합니다. 현대 REST API에서 JSON 내보내기를 XML로 변환하여 사용자 정의 XML 직렬화기 없이 이러한 시스템에 공급하세요.
- Android 리소스 파일
- Android 문자열 리소스, 레이아웃 제약, 매니페스트 항목은 모두 XML입니다. JSON 데이터 소스에서 리소스 파일을 프로그래밍 방식으로 생성하거나 업데이트하고 Android 빌드 시스템에 필요한 XML 형식으로 변환하세요.
- SVG 및 벡터 그래픽 생성
- SVG는 XML입니다. JSON 데이터로 SVG 구조를 빌드하고 — 경로, 도형, 색상, 변환 — XML로 변환하여 웹, 인쇄, 벡터 편집 도구에 사용할 유효한 SVG 파일을 생성하세요.
기술 세부 정보
- RFC 8259 호환 JSON 파싱
- JSON 입력은 브라우저의 네이티브 JSON.parse()를 사용하여 파싱되며 RFC 8259를 완전히 준수합니다. 최선의 위치 정보(줄 및 열 번호)를 포함한 정확한 구문 오류 메시지를 제공하며 모든 JSON 데이터 타입(문자열, 숫자, 불리언, null, 배열, 객체)을 처리합니다.
- 사용자 정의 재귀 JSON-to-XML 직렬화기
- 파싱 후 사용자 정의 재귀 직렬화기가 JSON 트리를 탐색합니다. @_로 시작하는 객체 키는 부모 요소의 XML 속성으로 출력됩니다. #text 키는 요소의 텍스트 내용으로 출력됩니다. 일반 객체 키는 자식 요소가 됩니다. 배열 값은 반복되는 같은 이름의 형제 요소를 생성합니다. 텍스트 내용과 속성 값의 특수 문자(<, >, &, ", ')는 XML 엔티티 참조로 이스케이프됩니다.
- 루트 정규화
- XML은 정확히 하나의 루트 요소를 요구하므로 직렬화기는 문서 빌드 전에 루트 정규화를 적용합니다: 단일 키 객체는 해당 키를 루트로 사용하고, 다중 키 객체와 최상위 배열은 합성
감싸기를 받습니다. 이로써 입력 형태에 관계없이 출력이 항상 올바른 형식의 XML이 됩니다. - 100% 브라우저 기반 — 업로드 없음, 서버 없음
- 모든 처리가 브라우저의 JavaScript 엔진에서 실행됩니다. 어떤 시점에서도 네트워크를 통해 데이터가 전송되지 않습니다. 200KB보다 큰 입력은 자동으로 실시간 모드에서 수동 모드(명시적인 변환 클릭 필요)로 전환되어 무거운 직렬화 중에 브라우저 응답성을 유지합니다.
모범 사례
- 단일 키 객체로 루트 요소 제어
- 의미 있는 XML을 생성하는 가장 깔끔한 방법은 최상위 JSON이 원하는 루트 요소 이름이 키인 단일 키 객체인지 확인하는 것입니다. 다중 키 데이터를 하나의 명명된 키 아래에 감싸면 일반적인
감싸기 대신 의미론적으로 의미 있는 루트가 생성됩니다. - 속성이 많은 XML에는 @_와 #text 사용
- 대상 XML 스키마가 많은 속성을 사용한다면(설정 파일, SVG, SOAP 엔벨로프에서 일반적), 변환 전에 @_ 접두사가 붙은 키와 #text를 사용하도록 JSON을 재구성하세요. 결과 XML이 후처리 없이 대상 스키마와 정확히 일치하게 됩니다.
- 의미 있는 태그 이름을 위해 배열을 명명된 객체로 감싸기
- 최상위 배열은
- 이 고정 리터럴 이름인 일반적인
패턴을 생성합니다. 배열을 명명된 키 아래에 감싸면 — { "products": [...] } — 반복되는- ...
요소(키 이름이 모든 배열 요소에 재사용됨)가 감싸기 아래에 생성됩니다. 이로써 도메인에 의미 있는 태그 이름이 생성되며 스키마로 파싱되거나 유효성 검사될 XML에는 거의 항상 더 나은 선택입니다. - 이 고정 리터럴 이름인 일반적인
- XML 포맷터로 출력 유효성 검사
- 변환 후 XML 출력을 XML 포맷터에 붙여넣어 형식 일치성을 유효성 검사하고, 들여쓰기를 확인하고, 다운스트림 서비스에 XML을 전송하거나 버전 관리에 커밋하기 전에 구조적 문제를 식별하세요.
- 변환 전 JSON 키 정리
- XML 요소 이름은 문자 또는 밑줄로 시작해야 하며 공백이나 대부분의 특수 문자를 포함할 수 없습니다. JSON 키가 외부 소스(데이터베이스 열 이름, API 필드 이름, 사용자 입력)에서 온 경우 잘못된 형식의 출력을 방지하기 위해 변환 전에 XML 이름 유효성을 감사하세요.
자주 묻는 질문
이 도구 사용 시 JSON 데이터가 서버로 전송되나요?
도구는 XML 루트 요소를 어떻게 결정하나요?
다중 키 JSON 객체가 로 감싸지는 이유는 무엇인가요?
최상위 JSON 배열은 XML로 어떻게 변환되나요?
JSON 키를 XML 속성으로 변환하려면 어떻게 하나요?
#text 키는 무엇에 사용되나요?
들여쓰기가 XML 구조에 영향을 미치나요?
객체 내부에 중첩된 JSON 배열은 XML로 어떻게 변환되나요?
XML을 다시 JSON으로 변환하려면 어떻게 하나요?
XML 출력을 유효성 검사하거나 포맷할 수 있나요?
JSON 입력에 파일 크기 제한이 있나요?
어떤 JSON 타입이 지원되나요?
관련 도구
모든 도구 보기 →Base64 디코더 · 인코더 (Base64 Decoder & Encoder)
인코딩 & 포매팅
Base64를 온라인에서 무료로 인코딩하고 디코딩합니다. UTF-8과 이모지를 완벽 지원하는 실시간 변환으로, 100% 브라우저에서 처리되어 회원 가입이 필요 없습니다.
CSV to JSON 변환기 (CSV to JSON Converter)
인코딩 & 포매팅
브라우저에서 CSV를 JSON으로 변환합니다. RFC 4180, 타입 추론, 헤더 행, 큰 정수 안전 처리. 100% 비공개, 업로드 없음.
JSON Diff 비교
인코딩 & 포매팅
두 JSON 파일을 브라우저에서 즉시 Diff 비교하세요. 나란히 보기 하이라이팅, RFC 6902 JSON Patch 출력, 타임스탬프·ID 같은 노이즈 필드 무시. 비공개, 업로드 없음.
JSON 포맷터 (JSON Formatter)
인코딩 & 포매팅
브라우저에서 JSON을 즉시 포매팅하고 유효성 검사를 수행합니다. 온라인 도구로 구문 검사, 오류 감지, 최소화, 복사를 지원하며 데이터는 서버로 전송되지 않습니다.
JSON Schema 검증기
인코딩 & 포매팅
JSON Schema 온라인 검증기. Draft 2020-12, 2019-09, Draft-07 지원에 JSON Pointer 경로 단위 오류 메시지. 100% 브라우저 처리, 업로드 없음, 무료.
JSON to CSV 변환기 (JSON to CSV Converter)
인코딩 & 포매팅
브라우저에서 JSON을 CSV로 변환합니다. RFC 4180, Excel-EU, TSV, Pipe 프리셋 지원. 중첩 평탄화 또는 문자열화. 100% 비공개, 업로드 없음.