XML → JSON

XML과 JSON은 데이터를 다르게 모델링합니다: XML에는 속성과 혼합 콘텐츠가, JSON에는 객체와 배열이 있습니다. 손실 없이 변환하려면 관례가 필요합니다. 이 도구는 세 가지를 제공합니다: compact(속성 버림), Badgerfish(속성은 @key 아래, 텍스트는 $ 아래), literal(모든 XML 노드가 완전한 충실도의 JSON 객체가 됨). 대상으로 하는 JSON 소비자에 맞는 것을 고르세요.

XML을 JSON으로 변환하는 방법

  1. 1

    XML 붙여넣기

    적격 XML이면 무엇이든. 네임스페이스가 보존됩니다.

  2. 2

    변환 스타일 선택

    Compact, Badgerfish, 또는 literal/무손실.

  3. 3

    배열 처리

    특정 요소를 항상 배열로 강제할 수 있습니다(설정 가능).

  4. 4

    JSON 출력 복사

    정렬 출력 또는 압축, 원하는 대로.

세 가지 스타일 비교

입력:

<book id="1" lang="en">
  <title>1984</title>
  <author>Orwell</author>
</book>

Compact(속성 버림):

{
  "book": {
    "title": "1984",
    "author": "Orwell"
  }
}

Badgerfish(속성은 @ 아래, 텍스트는 $ 아래):

{
  "book": {
    "@id": "1",
    "@lang": "en",
    "title": { "$": "1984" },
    "author": { "$": "Orwell" }
  }
}

Literal / JsonML 비슷(완전한 충실도):

{
  "book": {
    "@attributes": { "id": "1", "lang": "en" },
    "title": "1984",
    "author": "Orwell"
  }
}

강제 배열

XML에는 “이것은 한 개짜리 목록이다”라고 말할 방법이 없습니다. 단일 요소 시퀀스는 스칼라와 똑같아 보입니다:

<items>
  <item>A</item>
</items>

이는 {"item": "A"}나 {"item": ["A"]} 둘 중 하나로 직렬화될 수 있습니다. 변환기는 요소 이름을(XPath로) 항상 배열로 표시하게 해, 하위 JSON 소비자가 일관된 타입을 받도록 합니다.

혼합 콘텐츠

혼합 콘텐츠, 자식 요소와 교차된 텍스트, 는 어떤 XML→JSON 변환이든 정보를 잃는 유일한 지점입니다:

<p>Hello <em>world</em>!</p>

대부분의 스타일은 텍스트를 버리거나 합쳐버립니다. literal 스타일은 배열을 통해 순서를 보존합니다:

{
  "p": {
    "@content": ["Hello ", { "em": "world" }, "!"]
  }
}

타입 추론

기본적으로 값은 문자열입니다. “숫자/불리언 파싱”을 켜면 변환기가 42, 3.14, true, false를 맞는 JSON 타입으로 변환합니다. 주의하세요: XML 속성 id="007"은 변환을 켜면 7이 되는데, 아마 원하지 않을 것입니다.

어느 것을 고를까

  • Compact: 속성이 잡음인 사람이 읽는 JSON용.
  • Badgerfish: 속성과 텍스트가 자식과 같은 깊이에 필요할 때.
  • Literal: 손실 없이 XML로 다시 왕복해야 할 때.

자주 묻는 질문

요소가 한 번 나오면 변환기는 기본적으로 객체로, 두 번 이상이면 배열로 처리합니다. 소비자가 하나의 형태를 기대하면 강제 배열 옵션으로 일관되게 만드세요.

“네임스페이스 제거”를 켜지 않는 한 네임스페이스 접두사는 키에 보존됩니다(ns:title). 선언 자체는 루트 요소의 @xmlns:ns 속성이 됩니다.

Literal 모드가 무손실에 가장 가깝지만, 요소와 텍스트 사이의 혼합 콘텐츠 순서는 까다롭습니다. Compact 모드는 분명히 속성을 잃습니다. Badgerfish는 실용적인 중간 지점입니다.

아니요. 변환은 브라우저에서 실행됩니다.

관련 도구

이 도구는 다른 언어로도 제공됩니다