Skip to content

XML to JSON 변환기

XML을 붙여넣으면 즉시 JSON으로 변환됩니다. 속성을 @_ 키로 변환하고 반복 요소를 배열로 처리합니다. 100% 브라우저 내 처리, 업로드 없음, 회원가입 불필요.

트래킹 없음 브라우저 실행 무료
옵션 · 2칸 · XML → JSON
들여쓰기
0
JSON 출력
0
XML 1.0 형식 일치성 처리, @_/#text 관례 정확성, 문자열 보존 정확성에 대해 검토 완료 — Go Tools Engineering Team · May 29, 2026

XML-to-JSON 변환이란 무엇이며 어떻게 작동하나요?

XML(Extensible Markup Language)과 JSON(JavaScript Object Notation)은 모두 구조화된 데이터 형식이지만 근본적으로 다른 모델을 가집니다: XML은 속성과 혼합 내용(자식 요소와 텍스트가 혼합된)을 가진 요소의 트리이고, JSON은 객체, 배열, 문자열, 숫자, 불리언, null 값의 트리입니다. 두 형식 사이를 변환하려면 불일치를 해소하기 위한 관례가 필요합니다.

이 도구는 fast-xml-parser(Node.js), xmltodict(Python), JAXB(Java) 같은 인기 라이브러리에서 사용하는 것과 동일한 가장 널리 채택된 관례를 사용합니다:

**1. 속성 → @_ 접두사.** XML 속성에는 직접적인 JSON 대응물이 없습니다. 관례는 @_ 접두사가 붙은 키로 표현하는 것입니다. 따라서 은 user 객체 내에서 { "@_id": "42", "@_role": "admin" }이 됩니다. 이 접두사는 모호하지 않습니다: 유효한 XML 요소 이름은 @로 시작할 수 없으므로 자식 요소 이름과 충돌이 없습니다.

**2. 속성이 있는 요소의 텍스트 내용 → #text.** 요소에 속성과 텍스트 내용이 모두 있는 경우 — 29.99 — 텍스트는 속성과 같은 JSON 객체를 공유해야 합니다. 관례는 #text 키 아래에 저장하는 것입니다. 텍스트 내용만 있고 속성이 없는 요소는 일반 문자열 값으로 변환됩니다.

**3. 반복 형제 요소 → 배열.** XML은 같은 이름을 가진 여러 자식 요소를 허용하지만 JSON 객체는 중복 키를 가질 수 없습니다. 해결 방법은 같은 이름의 형제를 배열로 수집하는 것입니다. 하나의 자식은 단일 객체가 되고, 두 개 이상의 자식은 객체의 배열이 됩니다. 이것이 이해해야 할 가장 중요한 동작입니다: JSON 형태는 XML의 형제 요소 수에 따라 변경됩니다.

**4. 타입 강제 변환 없음 — 모든 값이 문자열로 유지.** XML에는 텍스트 내용에 대한 고유 타입 시스템이 없습니다. XML의 "123" 값은 문자열입니다. JSON 숫자 123으로 변환하려면 작성자의 의도에 대한 가정이 필요합니다 — 우편번호("01234" → 1234), 전화번호, 패딩된 식별자, 정밀도에 민감한 소수 문자열에 대해 틀린 가정입니다. 이 도구는 모든 값을 문자열로 보존합니다. 타입을 알고 있는 필드에 대해 직접 코드에서 타입 강제 변환을 적용하세요.

**5. 주석, 처리 명령어, 네임스페이스에 대해 손실됨.** XML은 JSON에 없는 기능을 지원합니다: 주석(), 처리 명령어(), 네임스페이스 의미론. 이것들은 변환 중에 버려지거나 근사화됩니다. 무손실 XML 작업 — 재포맷팅, 최소화, 유효성 검사 — 에는 XML 포맷터를 사용하세요. 역방향 변환 — JSON에서 XML 생성 — 에는 JSON to XML 변환기를 사용하세요.

**왜 XML을 JSON으로 변환하나요?** JSON은 JavaScript의 네이티브 형식이며 REST API의 기본 교환 형식입니다. 레거시 SOAP 서비스, RSS 피드, 사이트맵, 기업 시스템에서 XML을 받는 경우 JSON으로 변환하면 표준 JavaScript 객체 접근, JSON 경로 쿼리, JSON 인식 데이터베이스나 API를 사용하여 데이터를 처리할 수 있습니다. 변환은 단방향 브리지입니다: 현대 스택에서 XML 데이터를 소비하는 데 유용하지만 XML 문서를 보존하거나 왕복 변환하기 위한 것은 아닙니다.

// Convert XML to JSON in Node.js using fast-xml-parser
import { XMLParser } from 'fast-xml-parser';

const xml = `<catalog>
  <product id="P01">
    <name>Wireless Headphones</name>
    <price currency="USD">79.99</price>
  </product>
</catalog>`;

const parser = new XMLParser({
  ignoreAttributes: false,      // preserve attributes
  attributeNamePrefix: '@_',    // @_ prefix for attributes
  textNodeName: '#text',        // #text for mixed element content
  parseAttributeValue: false,   // no type coercion on attributes
  parseTagValue: false,         // no type coercion on element text
});

const result = parser.parse(xml);
console.log(JSON.stringify(result, null, 2));
// {
//   "catalog": {
//     "product": {
//       "@_id": "P01",
//       "name": "Wireless Headphones",
//       "price": {
//         "@_currency": "USD",
//         "#text": "79.99"
//       }
//     }
//   }
// }

주요 기능

실시간 변환

XML을 입력하거나 붙여넣으면 JSON 출력이 즉시 업데이트됩니다 — 변환 버튼이 필요 없습니다. 대용량 입력(>200KB)은 자동으로 수동 모드로 전환하여 브라우저 응답성을 유지합니다.

@_ 속성 접두사 관례

XML 속성은 @_ 접두사가 붙은 JSON 키가 됩니다. fast-xml-parser와 xmltodict 관례를 따릅니다. 은 { "@_attr": "val" }이 됩니다 — 유효한 요소 이름과 충돌 없이 모호함이 없습니다.

반복 요소 배열 자동 감지

같은 이름의 형제 요소는 자동으로 JSON 배열이 됩니다. 하나의 은 객체가 되고, 두 개 이상의 요소는 배열이 됩니다. 설정이 필요 없습니다 — 도구가 자동으로 반복을 감지합니다.

타입 강제 변환 없음 — 값이 문자열로 유지

모든 XML 값은 JSON 문자열로 보존됩니다. 선행 영, 전화번호, 패딩 코드, "true"나 "false" 같은 불리언처럼 보이는 문자열은 절대 자동으로 숫자나 불리언으로 변환되지 않습니다.

100% 브라우저 기반 개인 정보 보호

모든 변환은 JavaScript를 사용하여 브라우저에서 로컬로 실행됩니다. 자격 증명, 내부 설정, 민감한 페이로드를 포함한 XML은 어떤 서버로도 전송되지 않고, 기록되지 않으며, 저장되지 않습니다.

형식 오류 보고

XML이 올바른 형식이 아닌 경우 도구가 첫 번째 오류의 정확한 줄 번호와 열 번호를 보고하여 변환 전에 문제를 즉시 찾아 수정할 수 있습니다.

예시

설정 파일

<?xml version="1.0" encoding="UTF-8"?>
<appConfig version="2.1" env="production">
  <database>
    <host>db.example.com</host>
    <port>5432</port>
    <name>myapp_prod</name>
    <pool max="10" min="2"/>
  </database>
  <cache enabled="true">
    <ttl>3600</ttl>
    <driver>redis</driver>
  </cache>
</appConfig>

속성과 중첩 요소가 있는 소규모 애플리케이션 설정입니다. 속성은 JSON 출력에서 @_ 접두사가 붙은 키로 변환됩니다: version="2.1"은 appConfig 아래에서 "@_version": "2.1"이 되고, pool 요소의 max와 min 속성은 "@_max": "10"과 "@_min": "2"가 됩니다. port와 ttl을 포함한 모든 값은 변환기가 타입 강제 변환을 수행하지 않으므로 문자열로 유지됩니다.

사이트맵 조각

<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">
  <url>
    <loc>https://go-tools.org/tools/xml-to-json</loc>
    <lastmod>2026-05-29</lastmod>
    <changefreq>weekly</changefreq>
    <priority>0.8</priority>
  </url>
  <url>
    <loc>https://go-tools.org/tools/json-to-xml</loc>
    <lastmod>2026-05-29</lastmod>
    <changefreq>weekly</changefreq>
    <priority>0.8</priority>
  </url>
</urlset>

두 개의 URL이 포함된 sitemap.xml 조각입니다. 아래에 두 개의 형제 요소가 있으므로 JSON 배열이 됩니다. xmlns 네임스페이스 선언은 urlset 객체에서 "@_xmlns"가 됩니다. priority 값 "0.8"은 문자열로 유지됩니다 — 숫자 강제 변환이 없으므로 "0.08" 같은 선행 영(零) 값도 정확히 보존됩니다.

RSS 항목

<item>
  <title>XML to JSON: A Practical Guide</title>
  <link>https://go-tools.org/blog/xml-to-json-guide</link>
  <pubDate>Thu, 29 May 2026 00:00:00 GMT</pubDate>
  <category>Developer Tools</category>
  <description>Learn how XML attributes map to @_ keys, how repeated elements become arrays, and why values stay strings in any XML-to-JSON conversion.</description>
  <guid isPermaLink="true">https://go-tools.org/blog/xml-to-json-guide</guid>
</item>

RSS 2.0 item 요소입니다. guid 요소에 isPermaLink 속성이 있으므로 JSON 출력의 guid는 "@_isPermaLink": "true"와 "#text": "https://go-tools.org/blog/xml-to-json-guide"를 가진 객체가 됩니다 — 속성과 요소의 텍스트 내용이 형제 키로 공존합니다. 다른 모든 요소는 텍스트 내용만 있으며 문자열 값으로 직접 변환됩니다.

사용 방법

  1. 1

    XML 붙여넣기

    위 입력 필드에 XML을 입력하거나 붙여넣으세요. '예시 불러오기'를 클릭하여 샘플을 사용해 볼 수도 있습니다 — 설정 파일, 사이트맵 조각, RSS 항목.

  2. 2

    실시간 JSON 출력 확인

    JSON이 즉시 출력 패널에 표시됩니다. 속성은 @_ 접두사가 붙은 키가 되고, 혼합 요소의 텍스트 내용은 #text가 되며, 반복 형제 요소는 배열이 됩니다. 필요에 따라 들여쓰기(2칸 또는 4칸)를 조정하세요.

  3. 3

    복사 또는 다운로드

    복사를 클릭하여 JSON을 클립보드에 저장하거나 다운로드를 클릭하여 애플리케이션, API, 데이터 파이프라인에 사용할 준비가 된 .json 파일로 저장하세요.

일반적인 변환 함정

값이 문자열로 유지된다는 사실 망각

변환기는 타입 강제 변환을 수행하지 않습니다. 다운스트림 코드에서 JSON 숫자를 예상하지만 XML에 숫자 문자열이 포함된 경우 변환 후 명시적으로 강제 변환해야 합니다. 암묵적인 문자열-숫자 강제 변환(JavaScript의 == 또는 산술 연산자)에 의존하는 것은 오류가 발생하기 쉽습니다 — 항상 parseInt(), parseFloat(), 또는 Number()를 의도적으로 사용하세요.

✗ 오류
// XML: <timeout>30</timeout>
// JSON output: { "timeout": "30" }  ← string, not number
// Dangerous: comparing as-is
if (config.timeout > 25) { ... }  // "30" > 25 coerces, but fragile
✓ 정상
// XML: <timeout>30</timeout>
// JSON output: { "timeout": "30" }
// Safe: explicit coercion where you know the type
if (parseInt(config.timeout, 10) > 25) { ... }

단일 항목 대 배열 형태 불일치

요소가 하나만 있으면 출력은 객체이고, 두 개 이상이면 배열이 됩니다. 항상 result.items.forEach()를 수행하는 소비 코드는 items가 단일 객체일 때 충돌합니다. 스키마가 하나 또는 여러 항목을 허용한다면 변환 후 항상 배열로 정규화하세요.

✗ 오류
// XML with one item: <root><item>a</item></root>
// JSON: { "root": { "item": "a" } }  ← string, not array
result.root.item.forEach(i => console.log(i));  // TypeError: not a function
✓ 정상
// Normalize to array regardless of count
const items = [].concat(result.root?.item ?? []);
items.forEach(i => console.log(i));  // safe for 0, 1, or many

혼합 내용: 텍스트와 #text 키

요소에 속성과 텍스트 내용이 모두 있으면 텍스트는 #text 아래에 저장됩니다. 텍스트 값에 일반 문자열인 것처럼 접근하면 대신 객체가 반환됩니다. 속성이 가능할 때 요소 값이 문자열인지 #text 키가 있는 객체인지 항상 확인하세요.

✗ 오류
// XML: <price currency="USD">29.99</price>
// JSON: { "price": { "@_currency": "USD", "#text": "29.99" } }
const amount = result.price;  // { "@_currency": "USD", "#text": "29.99" }, not "29.99"
✓ 정상
// Handle both plain string and @_/#text object
const raw = result.price;
const amount = typeof raw === 'object' ? raw['#text'] : raw;  // "29.99"

올바른 형식이 아닌 XML 입력

변환기는 올바른 형식의 XML을 요구합니다. 형식 오류의 일반적인 원인: 텍스트 내용에서 이스케이프되지 않은 &(대신 & 사용), 태그 불일치( — XML은 대소문자를 구분함), 여러 루트 요소, 닫히지 않은 태그. 오류 메시지에는 첫 번째 문제의 줄 번호와 열 번호가 표시됩니다.

✗ 오류
<!-- Unescaped & — well-formedness error -->
<query>name = 'Alice' & role = 'admin'</query>
✓ 정상
<!-- Escaped & — valid XML -->
<query>name = 'Alice' &amp; role = 'admin'</query>

강제 변환으로 인한 선행 영 값 손상

이 도구는 타입 강제 변환을 수행하지 않으므로 선행 영이 보존됩니다. 강제 변환을 수행하는 라이브러리(일부 JSON 스키마 검사기, ORM 매퍼)로 JSON을 후처리하면 선행 영이 손실될 수 있습니다. 스키마에서 항상 필드 타입을 명시적으로 문자열로 선언하세요.

✗ 오류
// XML: <zipCode>01234</zipCode>
// This tool outputs: { "zipCode": "01234" }  ← correct
// But if a downstream schema coerces:
// { zipCode: z.number() }  → 1234  ← leading zero lost
✓ 정상
// Declare ZIP codes and other padded identifiers as strings
// { zipCode: z.string() }  → "01234"  ← correct

주요 사용 사례

SOAP / 레거시 XML API 소비
은행, 보험, 물류 등의 레거시 기업 서비스는 XML을 반환하는 SOAP API를 노출하는 경우가 많습니다. 응답을 JSON으로 변환하여 현대 JavaScript 도구로 데이터를 처리하거나 문서 데이터베이스에 저장하거나 REST API 소비자에게 전달하세요.
RSS 및 Atom 피드 처리
RSS 2.0과 Atom 1.0 피드는 XML입니다. 피드 XML을 JSON으로 변환하여 XML 파싱 라이브러리 의존성 없이 피드 집계기, 콘텐츠 파이프라인, 알림 시스템에서 제목, 링크, 발행일, 설명을 추출하세요.
사이트맵 파일 파싱
sitemap.xml 파일은 메타데이터와 함께 사이트의 URL을 열거합니다. 사이트맵을 JSON으로 변환하여 URL 커버리지를 분석하고, 크롤링 큐를 생성하고, 환경 간 사이트맵을 비교하거나 링크 검사기나 SEO 감사 도구에 URL을 공급하세요.
설정 파일 변환
많은 기업 시스템(Spring, Maven, Ant, JBoss, Tomcat)은 XML 설정 파일을 사용합니다. 분석, 마이그레이션 스크립팅, 문서 생성 또는 JSON을 네이티브로 지원하는 도구로 가져오기 위해 JSON으로 변환하세요.
모바일 및 Android 개발
Android 리소스, 레이아웃 파일, AndroidManifest.xml은 모두 XML입니다. 분석 스크립트, 자동화된 감사, 또는 선언된 권한, 액티비티, 리소스 값에 대한 문서 생성을 위해 JSON으로 변환하세요.
데이터 마이그레이션 및 ETL
기업 시스템(ERP, CRM, 급여)에서의 데이터 내보내기는 종종 XML로 도착합니다. JSON으로 변환하여 MongoDB, Firestore, REST API 같은 JSON 네이티브 데이터 저장소에 데이터를 로드하는 ETL 파이프라인의 첫 번째 단계로 사용하세요.

기술 세부 정보

XML 파싱을 위한 브라우저 DOMParser
XML 입력은 브라우저의 네이티브 DOMParser에 'text/xml' MIME 타입을 사용하여 파싱됩니다 — SVG와 XHTML을 렌더링하는 데 사용되는 동일한 엔진입니다. 완전히 XML 1.0 규격을 준수하며 줄 및 열 정보와 함께 형식 오류를 보고합니다. 이 접근 방식은 서드파티 의존성 없이 네임스페이스, CDATA 섹션, 처리 명령어, 엔티티 참조를 올바르게 처리합니다.
재귀적 DOM-to-JSON 직렬화
파싱 후 도구가 DOM 트리를 재귀적으로 탐색합니다. 요소 노드는 JSON 객체가 되고, 속성은 @_ 접두사가 붙은 키가 되며, 텍스트만 있는 요소는 일반 문자열 값이 되고, 속성과 텍스트 내용이 모두 있는 요소는 텍스트 내용을 위해 #text 키를 갖습니다. 같은 이름의 형제 요소는 수집되어 JSON 배열로 출력됩니다. 요소 사이의 공백만 포함하는 텍스트 노드는 버려집니다.
타입 강제 변환 없음 — 문자열 보존
모든 속성 값과 텍스트 내용은 JSON 출력에 문자열로 작성됩니다. parseInt, parseFloat, 불리언 파싱이 적용되지 않습니다. 이는 선행 영 값, 정밀도에 민감한 소수, 불리언처럼 보이는 문자열에 대한 자동 데이터 손상을 방지하기 위한 의도적인 설계 선택입니다. 필요한 경우 타입 강제 변환은 다운스트림 코드에서 명시적으로 적용해야 합니다.
100% 브라우저 기반 — 업로드 없음, 서버 없음
모든 처리가 브라우저의 JavaScript 엔진에서 실행됩니다. 어떤 시점에서도 네트워크를 통해 데이터가 전송되지 않습니다. 200KB보다 큰 입력은 자동으로 실시간 모드에서 수동 모드(명시적인 변환 클릭 필요)로 전환되어 브라우저 응답성을 유지하고 무거운 DOM 탐색 중 메인 스레드 블로킹을 방지합니다.

모범 사례

먼저 XML 형식 일치성 유효성 검사
XML 소스가 직접 작성되었거나 가끔 잘못된 형식의 출력을 생성하는 시스템에서 온 경우 변환 전에 유효성을 검사하세요. XML 포맷터의 유효성 검사 버튼을 사용하여 XML이 올바른 형식인지 확인하고 문제에 대한 정확한 오류 위치를 얻으세요.
일대다 필드를 배열로 정규화
XML 스키마가 같은 이름의 자식 요소를 하나 또는 여러 개 허용하면 JSON 출력은 하나의 요소에 대해 객체가 되고 여러 요소에 대해 배열이 됩니다. 소비 코드에서 항상 이 필드들을 정규화하세요: const items = [].concat(result.items ?? []) — 이는 0, 1, 또는 여러 항목에 안전하며 TypeError를 방지합니다.
명시적이고 선택적으로 타입 강제 변환 적용
이 도구는 모든 값을 문자열로 보존하므로, 필요한 특정 필드에 대해 코드에서 의도적으로 타입 강제 변환을 적용하세요. 알려진 정수 필드에 parseInt(val, 10)을 사용하는 것은 안전합니다. Number(val)로 광범위하게 강제 변환을 적용하면 선행 영 값, 빈 문자열, 정밀도에 민감한 소수를 손상시킬 위험이 있습니다.
요소 값 접근 시 #text 확인
요소가 일부 페이로드에서 속성을 가질 수 있고 다른 경우에는 없을 수 있다면, JSON 값은 일반 문자열(속성 없음) 또는 @_ 키와 #text 키가 있는 객체(속성 있음)가 됩니다. 강건한 접근자를 작성하세요: const val = typeof node === 'object' ? node['#text'] : node. 이 패턴은 두 형태를 모두 처리하고 자동 undefined 값을 방지합니다.
무손실 XML 작업에는 XML 포맷터 사용
XML-to-JSON 변환은 주석, 처리 명령어, 네임스페이스 의미론을 버립니다. 모든 XML 내용을 정확히 보존해야 한다면 XML 포맷터를 사용하여 데이터 손실 없이 정리, 최소화, 유효성 검사를 수행하세요. JSON 네이티브 컨텍스트에서 데이터를 처리해야 할 때만 JSON으로 변환하세요.

자주 묻는 질문

이 도구 사용 시 XML 데이터가 서버로 전송되나요?
아니요. 모든 변환은 JavaScript를 사용하여 브라우저에서 완전히 처리됩니다. XML은 네트워크를 통해 전송되지 않고, 어떤 서버에도 저장되지 않으며, 기록되거나 분석되지 않습니다. 따라서 API 자격 증명, 내부 서비스 설정, SOAP WS-Security 토큰, 의료 HL7/FHIR 데이터 등 민감한 내용을 포함하는 XML 페이로드에도 안전하게 사용할 수 있습니다. 브라우저의 네트워크 탭을 열어 확인할 수 있습니다 — XML을 붙여넣거나 변환해도 아무 요청도 발생하지 않습니다.
XML 속성은 JSON 출력에서 어떻게 매핑되나요?
XML 속성은 @_ 접두사가 붙은 JSON 키가 됩니다. 예를 들어 는 "@_id": "P01"과 "@_category": "electronics"를 포함하는 JSON 객체를 생성합니다. 요소에 속성과 텍스트 내용이 모두 있는 경우 — 29.99 — 텍스트 내용은 특수 키 "#text" 아래에 저장되어 결과는 { "@_currency": "USD", "#text": "29.99" }가 됩니다. 이 관례는 일관되고 예측 가능합니다: @_는 항상 속성을 의미하고, #text는 항상 요소의 텍스트 내용을 의미합니다.
변환기가 숫자나 불리언을 강제 변환하나요?
아니요. 모든 XML 텍스트 내용과 속성 값은 외관과 관계없이 JSON 문자열이 됩니다. 42는 42가 아닌 "count": "42"가 됩니다. true는 true가 아닌 "enabled": "true"가 됩니다. 이는 의도적이고 중요합니다: 선행 영(전화번호, 계정 코드, "01234" 같은 우편번호), "0.100" 같은 소수 정밀도, 불리언처럼 보이는 문자열 값을 보존합니다. 다운스트림 JSON에서 숫자나 불리언이 필요하다면 변환 후 직접 코드에서 타입 강제 변환을 적용하세요 — 정확히 어떤 필드가 강제 변환되는지 제어할 수 있는 곳에서.
반복(같은 이름을 가진 형제) 요소는 어떻게 처리되나요?
단일 자식 요소는 JSON 객체가 됩니다. 같은 부모 아래에 같은 태그 이름을 가진 두 개 이상의 자식 요소는 JSON 배열이 됩니다. 예를 들어 a는 { "root": { "item": "a" } }를 생성합니다 — item은 객체(문자열)입니다. 하지만 ab는 { "root": { "item": ["a", "b"] } }를 생성합니다 — item은 배열입니다. 즉 JSON 출력의 구조는 XML에 있는 형제 요소의 수에 따라 달라집니다. XML 스키마에 하나 또는 여러 항목이 있을 수 있다면 소비 코드에서 객체와 배열 두 경우를 모두 처리해야 합니다.
XML-to-JSON 변환은 무손실인가요?
아니요. XML에는 JSON에 해당하는 것이 없어 변환 중 삭제되는 기능이 있습니다: XML 주석()은 버려지고, 처리 명령어()는 버려지며, 네임스페이스 접두사 바인딩은 @_ 속성으로 부분적으로 보존되지만 의미론은 보존되지 않습니다. 또한 혼합 내용 노드(자식 요소와 텍스트가 혼합된)의 상대적 순서가 완전히 왕복 변환되지 않을 수 있습니다. 주석이나 처리 명령어가 없는 순수 구조 XML의 경우 변환은 모든 요소 이름, 속성 이름, 속성 값, 텍스트 내용을 보존합니다. 데이터 손실 없이 XML 작업이 필요하다면 — 포맷팅, 유효성 검사, XML 검사 — XML 포맷터를 대신 사용하세요.
JSON을 다시 XML로 변환하려면 어떻게 하나요?
동반 도구인 JSON to XML 변환기를 사용하세요. 같은 관례를 역방향으로 적용합니다: @_ 접두사가 붙은 키는 XML 속성이 되고, #text 키는 요소의 텍스트 내용이 되며, JSON 배열은 반복되는 같은 이름의 형제 요소가 됩니다. 이로써 두 도구는 왕복 변환 사용 사례에서 대칭적으로 동작합니다.
XML 네임스페이스는 어떻게 처리되나요?
네임스페이스 선언(xmlns="..."과 xmlns:prefix="...")은 일반 속성으로 처리되어 JSON 출력에서 @_xmlns와 @_xmlns:prefix 키로 나타납니다. 요소 이름의 네임스페이스 접두사는 요소 이름 키의 일부로 보존됩니다(예: 는 JSON에서 "soap:Body"가 됩니다). 두 접두사가 같은 URI를 가리킬 수 있다는 네임스페이스의 의미론은 해석되지 않습니다. 정확한 네임스페이스 처리가 중요하다면 JSON으로 변환하지 말고 네임스페이스 인식 파서에서 XML을 파싱하세요.
0123이 123이 아닌 "0123"이 되는 이유는 무엇인가요?
변환기가 타입 강제 변환을 수행하지 않기 때문입니다. "0123" 문자열과 숫자 123은 서로 다른 값입니다: "0123"은 많은 맥락에서 의미 있는 선행 영(계정 코드, 우편번호, 국가 식별 번호, 패딩된 식별자)을 가지고 있습니다. 그 선행 영을 자동으로 제거하면 데이터가 손상됩니다. 안전한 기본값은 모든 값을 XML에 표시된 그대로 문자열로 보존하는 것입니다. 값이 항상 일반 정수임을 아는 특정 필드에 대해서만 직접 코드에서 숫자 파싱을 선택적으로 적용하세요.
이 도구와 XML 포맷터의 차이점은 무엇인가요?
XML 포맷터는 XML을 재포맷합니다 — 들여쓰기와 공백을 변경하지만 출력은 여전히 XML입니다. 이 XML to JSON 변환기는 형식 자체를 변경합니다: 출력은 @_ 속성 관례를 사용하여 XML 구조를 나타내는 JSON 문서입니다. XML을 읽거나 편집하거나 유효성 검사하거나 최소화하려면 포맷터를 사용하세요. JavaScript 애플리케이션에서 XML 데이터를 작업하거나 REST API에 공급하거나 JSON 문서 저장소에 저장해야 할 때 이 변환기를 사용하세요.
파일 크기 제한이 있나요?
엄격한 제한은 없지만, 200KB를 초과하는 입력은 자동으로 실시간 변환에서 수동 모드로 전환됩니다. 수동 모드에서는 변환 버튼이 나타나며 클릭할 때만 변환이 실행됩니다 — 이렇게 하면 대용량 XML 문서를 파싱하는 동안 브라우저 응답성을 유지합니다. 매우 큰 XML 파일(수 메가바이트의 데이터 내보내기)의 경우 더 나은 성능을 위해 명령줄 도구를 고려하세요: python3 -c "import sys, xmltodict, json; print(json.dumps(xmltodict.parse(sys.stdin.read()), indent=2))" 또는 전용 XML-to-JSON 라이브러리를 사용한 node -e.
변환기가 CDATA 섹션을 처리하나요?
네. CDATA 섹션 내용()은 요소의 텍스트 내용으로 처리되어 JSON 출력에서 일반 문자열 값으로 나타납니다. CDATA 구분자 자체는 제거됩니다 — 내부 내용만 보존됩니다. 예를 들어 는 JSON에서 "note": "if (a < b) return;"을 생성합니다. 이것이 올바른 동작입니다: CDATA는 이스케이프 없이 특수 문자가 포함된 텍스트를 포함하는 방법일 뿐이며 의미론적 의미는 텍스트 내용입니다.
여러 루트 요소가 있는 XML을 변환할 수 있나요?
아니요. 여러 루트 요소가 있는 XML은 올바른 형식이 아니며, 이 도구는 올바른 형식의 XML 입력을 요구합니다. XML 파서가 여러 루트 요소를 제공하는 경우(XML 조각을 연결할 때 일반적), 변환 전에 하나의 루트 요소로 감싸세요. 예를 들어 가 있다면 로 변환하세요. 오류 메시지에는 형식 문제의 위치가 표시되어 빠르게 수정할 수 있습니다.