JSON-XML 변환기 - JSON/XML 양방향 변환 온라인
JSON과 XML 형식을 양방향으로 변환합니다. 속성, 네임스페이스, 포맷 설정 가능. 100% 클라이언트 사이드 처리, 데이터가 서버로 전송되지 않습니다.
자주 묻는 질문
JSON-XML 변환기란 무엇인가요?
JSON-XML 변환기는 JSON(JavaScript Object Notation)과 XML(eXtensible Markup Language) 형식 간에 데이터를 변환하는 도구입니다. JSON은 중괄호, 대괄호, 키-값 쌍을 사용하고, XML은 속성이 있는 계층적 태그를 사용합니다. 두 형식 모두 구조화된 데이터를 표현하지만, XML은 속성, 네임스페이스, CDATA 섹션 등 JSON에 직접적인 대응이 없는 추가 기능을 지원합니다. 이 변환기는 @_ 접두사(속성용)와 #text(텍스트 노드용) 같은 규칙을 사용하여 가능한 한 많은 정보를 보존하면서 양방향 변환을 수행합니다.
이 JSON-XML 변환기는 어떻게 사용하나요?
라디오 버튼으로 변환 방향을 선택합니다: JSON → XML 또는 XML → JSON. 입력 영역에 데이터를 붙여넣거나 Sample 버튼을 클릭하여 예제 데이터를 로드합니다. 입력하는 대로 실시간으로 자동 변환됩니다. 필요에 따라 옵션을 구성하세요: 속성 접두사, XML 선언, 루트 요소 이름, 들여쓰기. 출력 영역에서 변환된 결과를 확인하세요. Copy 버튼으로 결과를 복사하거나 Download로 파일로 저장할 수 있습니다. Swap 버튼을 사용하면 현재 데이터로 방향을 빠르게 전환할 수 있습니다.
제 데이터는 안전한가요? 서버로 전송되나요?
데이터는 100% 안전하며 브라우저를 벗어나지 않습니다. 이 변환기는 클라이언트 사이드 JavaScript로만 실행되는 fast-xml-parser 라이브러리를 사용합니다. 어떤 서버로도 데이터가 전송되거나, 데이터베이스에 저장되거나, 어디에도 기록되지 않습니다. 모든 파싱, 검증, 변환이 사용자의 기기에서 로컬로 처리됩니다. 인터넷 연결을 끊어도 동작하는 것으로 확인할 수 있습니다 — 초기 페이지 로드 후에는 완전히 오프라인으로 작동합니다.
변환 시 XML 속성은 어떻게 처리되나요?
XML 속성은 구성 가능한 접두사를 사용하여 JSON 속성에 매핑됩니다. 기본 접두사는 @_이므로, <book category="fiction"> 같은 XML 속성은 JSON에서 {"@_category": "fiction"}이 됩니다. 필요에 따라 접두사를 @, -, $ 등으로 변경할 수 있습니다. JSON에서 XML로 다시 변환할 때 구성된 접두사가 있는 속성은 자동으로 XML 속성으로 변환됩니다. 요소에 속성과 텍스트 내용이 모두 있는 경우, 텍스트는 #text 키에 저장됩니다.
변환 시 XML 네임스페이스는 어떻게 되나요?
기본적으로 네임스페이스 접두사는 JSON 출력에 보존됩니다 (예: <soap:Envelope>은 {"soap:Envelope": ...}이 됩니다). '네임스페이스 제거' 옵션을 활성화하면 네임스페이스 접두사가 제거되어 JSON 출력이 단순해집니다 (예: <soap:Envelope>이 {"Envelope": ...}이 됩니다). 네임스페이스 제거는 손실 작업이므로, JSON을 다시 XML로 변환하면 네임스페이스 정보가 손실됩니다. 무손실 왕복 변환이 필요하면 네임스페이스를 유지하세요.
JSON을 XML로 변환할 때 왜 루트 요소가 필요한가요?
XML은 정확히 하나의 루트 요소가 필요합니다. JSON에 단일 최상위 키가 있으면 (예: {"bookstore": {...}}), 그 키가 루트 요소가 됩니다. 그러나 JSON이 배열 (예: [{...}, {...}])이거나 여러 최상위 키가 있는 경우, 변환기는 출력을 루트 요소로 감쌉니다 (기본 이름: root). 옵션에서 루트 요소 이름을 사용자 정의할 수 있습니다. 이것은 도구의 제한이 아니라 XML의 근본적인 요구 사항입니다.
JSON-XML 변환의 제한 사항은 무엇인가요?
근본적인 형식 차이로 인해 JSON과 XML 간의 변환이 항상 완벽하게 무손실인 것은 아닙니다. 주요 제한 사항: (1) JSON에 주석 구문이 없어 XML 주석이 손실됩니다; (2) XML 처리 지시문(선언 제외)은 일반적으로 제거됩니다; (3) XML 혼합 콘텐츠(자식 요소 사이의 텍스트)는 #text 규칙을 사용해야 합니다; (4) JSON 키 순서가 보존되지 않을 수 있습니다(스펙상 객체는 순서가 없음); (5) XML CDATA 섹션은 JSON에서 일반 텍스트로 변환됩니다. 대부분의 실제 사용 사례(API 데이터, 설정 파일, 데이터 교환)에서는 이러한 제한이 문제가 되는 경우가 거의 없습니다.
코드 예제
// JSON to XML conversion using fast-xml-parser
const { XMLParser, XMLBuilder, XMLValidator } = require('fast-xml-parser');
function jsonToXml(jsonString) {
const parsed = JSON.parse(jsonString);
const builder = new XMLBuilder({
attributeNamePrefix: '@_',
textNodeName: '#text',
format: true,
indentBy: ' ',
ignoreAttributes: false,
});
return '<?xml version="1.0" encoding="UTF-8"?>\n' + builder.build(parsed);
}
function xmlToJson(xmlString) {
const validation = XMLValidator.validate(xmlString);
if (validation !== true) {
throw new Error(`Line ${validation.err.line}: ${validation.err.msg}`);
}
const parser = new XMLParser({
ignoreAttributes: false,
attributeNamePrefix: '@_',
textNodeName: '#text',
parseAttributeValue: true,
});
return JSON.stringify(parser.parse(xmlString), null, 2);
}
// Example
const json = '{"book":{"@_id":"1","title":"Hello"}}';
console.log(jsonToXml(json));
// <?xml version="1.0" encoding="UTF-8"?>
// <book id="1"><title>Hello</title></book>