MYMONDAY.ai
서비스스튜디오도구데이터·포맷73CSS 생성기19색상·이미지10인코딩·보안10웹·SEO11개발·데브옵스10파일·내보내기18계산기6가이드

XML JSON 변환기

속성은 접두사 키로, 반복 요소는 배열로, 숫자와 불리언은 타입으로 바꿔 예측 가능한 구조의 JSON을 만듭니다.

  • 브라우저에서 처리
  • 가입 없음
  • 무료

도구 작업 공간

예제

옵션

들여쓰기

XML → 데이터 매핑

속성은 이 문자로 시작하는 키가 되어 id="1"은 @id가 됩니다. 비우면 속성 이름 그대로 씁니다.

속성이나 자식 요소와 함께 있는 텍스트는 이 키에 담습니다.

끄면 <item>이 하나일 땐 객체, 여러 개일 땐 배열이 됩니다. 켜면 개수와 상관없이 구조가 같습니다.

끄면 모든 값이 문자열로 남습니다. 켜면 true/false, 정수, 소수는 해당 타입이 되고 007이나 긴 ID는 문자열로 둡니다.

XML 입력

21줄491byte

결과

⌘/Ctrl + Enter로 복사
결과 · data.json
{
  "order": {
    "@id": 4821,
    "@status": "shipped",
    "customer": {
      "@id": 77,
      "@vip": true,
      "name": "Ada Lovelace",
      "email": "ada@example.com"
    },
    "items": {
      "item": [
        {
          "@sku": "KB-100",
          "@qty": 1,
          "name": "Keyboard",
          "price": 49.9
        },
        {
          "@sku": "MS-220",
          "@qty": 2,
          "name": "Mouse",
          "price": 19
        }
      ]
    },
    "total": 87.9,
    "shipped_at": "2026-03-14T09:30:00Z",
    "tracking": ""
  }
}
키21
크기557byte

API, 피드, 레거시 내보내기가 XML을 주는데 코드는 JSON을 원할 때 쓰는 XML JSON 변환기입니다. 페이지에 내장된 엄격한 XML 1.0 파서로 문서를 읽고, 조절할 수 있는 몇 가지 규칙으로 JSON 값에 매핑한 뒤 정렬된 JSON으로 보여 줍니다. 작은 입력은 입력하는 동안 갱신되고, 파싱 오류는 줄과 열로 표시되며 편집기에서 해당 줄이 강조됩니다.

JSON에는 속성도 혼합 텍스트도 없으므로 어떤 변환기든 선택을 해야 합니다. 여기서는 그 선택이 XML → 데이터 매핑 패널에 드러나 있습니다. 속성 이름 앞에 붙일 접두사(기본 @), 속성이나 자식 요소 옆의 텍스트를 담을 키(기본 #text), 자식이 하나뿐인 요소도 배열로 감쌀지, 숫자나 불리언처럼 보이는 텍스트에 타입을 줄지입니다. 이 사이트의 모든 XML 변환기가 같은 매핑을 쓰므로 여기서 보는 JSON이 YAML, TOML, 코드 생성기의 출발점과 똑같습니다.

최대 20 MiB까지 브라우저 안에서 변환하며 업로드하지 않습니다. 200,000자를 넘으면 백그라운드 Worker에서 변환합니다. 1,000,000자를 넘으면 편집기 대신 읽기 전용 크기·줄 수 요약을 보여 주지만 변환과 파싱 오류 표시는 계속되며, 비우기를 누르면 편집기로 돌아옵니다. 출력 들여쓰기는 공백 2칸, 4칸, 탭, 압축 중에서 고르고, 결과를 복사하거나 data.json으로 내려받을 수 있습니다.

사용 방법

  1. XML 붙여넣기 또는 예제 선택

    문서를 붙여 넣거나 예제(API 응답, 중첩 목록, 엣지 케이스)를 불러오세요. 작은 문서는 JSON이 바로 나타나고 큰 입력은 백그라운드에서 변환됩니다. XML이 올바르지 않으면 줄과 열이 적힌 메시지가 대신 나옵니다.

  2. 속성 접두사와 텍스트 키 정하기

    XML → 데이터 매핑 패널을 엽니다. 받는 쪽이 @id가 아니라 id를 기대하면 @를 _로 바꾸거나 비우고, #text는 value 같은 이름으로 바꾸세요.

  3. 요소 하나일 때의 동작 결정

    배열 스위치를 끄면 <item>이 하나일 땐 객체, 여러 개일 땐 배열이 됩니다. 후속 코드가 항상 순회해야 한다면 자식 요소는 항상 배열로를 켜세요.

  4. 타입 해석 선택

    숫자·불리언으로 해석을 켜면 42, 24.50, true가 JSON 숫자와 불리언이 됩니다. 끄면 모든 값이 쓴 그대로 문자열로 남습니다.

  5. 들여쓰기를 고르고 복사·다운로드

    2칸, 4칸, 탭, 압축 중에서 선택해 JSON을 복사하거나 data.json으로 내려받으세요. 텍스트와 자식 요소가 섞인 요소가 있으면 출력 아래에 안내가 표시됩니다.

작동 원리

매핑 규칙

텍스트만 있는 요소는 문자열 또는 타입이 지정된 값이 되고, 빈 요소는 빈 문자열이 됩니다. 속성이나 자식이 있는 요소는 객체가 되며, 속성(접두사 포함)이 먼저, 속성 옆에 텍스트가 있으면 텍스트 키, 그다음 자식 요소가 문서 순서대로 옵니다. 문서 전체는 루트 요소 이름 아래에 감싸므로 결과의 최상위 키는 항상 하나입니다.

같은 이름의 형제 요소는 문서 순서대로 배열이 됩니다. 항상 배열 스위치가 꺼져 있으면 한 번만 나오는 이름은 단일 값이므로, 같은 XML 스키마라도 문서에 항목이 몇 개 들었느냐에 따라 JSON 모양이 두 가지가 될 수 있습니다. 매핑할 때 네임스페이스 URI를 해석하지 않으므로 dc:creator 같은 정규 이름은 키로 남고, xmlns 선언은 @xmlns:dc 같은 일반 속성으로 나타납니다. 다만 XML 파서는 모든 접두사가 해당 요소나 조상에서 xmlns:prefix로 선언되어 있어야 하며, 미리 정의된 xml 접두사만 선언 없이 쓸 수 있습니다.

XMLJSON
<a id="7"/>{"a": {"@id": 7}}
<a id="7">hi</a>{"a": {"@id": 7, "#text": "hi"}}
<a><b>1</b><b>2</b></a>{"a": {"b": [1, 2]}}
<a><b>1</b></a>{"a": {"b": 1}}
<a/>{"a": ""}
<a><![CDATA[1]]></a>{"a": "1"}

타입 해석과 그 한계

해석을 켜면 정확히 true·false인 값, 정수, 소수에 타입이 붙습니다. 나머지는 문자열로 남습니다. 앞자리가 0인 007, 02134(숫자가 아니라 식별자), 2^53을 넘는 20자리 ID 같은 큰 정수, 유효숫자가 15자리를 넘는 소수, 0으로 언더플로되는 1e-999 같은 지수, 숫자 앞뒤에 다른 글자가 붙은 텍스트가 그렇습니다. CDATA 내용에는 타입을 주지 않으므로 <![CDATA[1]]>은 문자열 "1"로 남고, 직접 만드는 문서라면 이것으로 문자열을 강제할 수 있습니다.

타입을 주면 텍스트 표현이 바뀝니다. 24.50은 24.5가 되고 1e3은 1000이 되는데, JSON 숫자에는 끝자리 0이 없기 때문입니다. 가격이나 1.10 같은 버전 번호처럼 쓴 글자가 중요하면 해석을 끄세요.

혼합 콘텐츠와 JSON이 표현하지 못하는 것

<p>Hello <b>bold</b> world</p>에서는 텍스트와 자식 요소가 번갈아 나오는데, JSON 객체는 텍스트 키와 다른 키 사이의 순서를 갖지 않습니다. 변환기는 텍스트 조각을 공백으로 이어 텍스트 키에 모으고 자식 요소는 그 옆에 두며, 그런 요소가 몇 개인지 안내를 표시합니다. 주석과 처리 명령은 JSON에 전혀 나타나지 않습니다.

실제 예시

속성과 반복 요소가 있는 주문
입력
<order id="1042" paid="true"><customer>Ada</customer><item sku="A1" qty="2">Pen</item><item sku="B7" qty="1">Ink</item><total>24.50</total></order>
출력
{
  "order": {
    "@id": 1042,
    "@paid": true,
    "customer": "Ada",
    "item": [
      {
        "@sku": "A1",
        "@qty": 2,
        "#text": "Pen"
      },
      {
        "@sku": "B7",
        "@qty": 1,
        "#text": "Ink"
      }
    ],
    "total": 24.5
  }
}

속성에는 @ 접두사가 붙고, 반복되는 item 요소는 배열이 되며, 24.50은 숫자 24.5가 되었습니다. 숫자·불리언으로 해석을 끄면 모든 값이 문자열이고 total은 "24.50"으로 남습니다.

식별자, 큰 숫자, CDATA
입력
<r><zip>02134</zip><big>12345678901234567890</big><neg>-3</neg><ok>true</ok><note><![CDATA[1]]></note><empty/></r>
출력
{
  "r": {
    "zip": "02134",
    "big": "12345678901234567890",
    "neg": -3,
    "ok": true,
    "note": "1",
    "empty": ""
  }
}

우편번호, 20자리 ID, CDATA 텍스트는 문자열로 남고 빈 요소는 빈 문자열이 됩니다.

사용자 지정 접두사·텍스트 키·항상 배열
입력
<cart><item id="1">Pen</item></cart>
출력
{
  "cart": {
    "item": [
      {
        "_id": 1,
        "value": "Pen"
      }
    ]
  }
}

설정은 속성 접두사 _, 텍스트 키 value, 항상 배열 켜짐입니다. 배열 스위치가 꺼져 있으면 item은 @id와 #text를 가진 객체 하나가 됩니다.

혼합 콘텐츠
입력
<p>Hello <b>bold</b> world</p>
출력
{
  "p": {
    "#text": "Hello world",
    "b": "bold"
  }
}

문장 안에서 bold의 위치가 사라지기 때문에, 텍스트와 자식 요소가 섞인 요소가 1개 있다는 안내가 표시됩니다.

자주 하는 실수

  • 한 개와 여러 개의 모양이 달라짐

    항상 배열 스위치가 없으면 <item> 하나는 객체, 둘은 배열이 되어 item을 순회하는 코드가 한 개짜리 경우에 깨집니다. 같은 스키마의 문서를 여러 개 다룬다면 스위치를 켜세요.

  • 숫자는 원래 글자를 잃음

    24.50은 24.5, 1.10은 1.1, 1e3은 1000이 됩니다. 유효숫자가 15자리를 넘는 소수와 1e-999처럼 언더플로되는 지수는 정밀도 손실을 막기 위해 문자열로 남습니다. 가격, 버전처럼 글자 그대로 비교하는 값이 있으면 타입 해석을 끄세요.

  • 접두사를 비우면 키가 충돌할 수 있음

    접두사를 비우면 속성 id와 자식 요소 <id>가 같은 키에 놓여 배열로 합쳐집니다. 텍스트 키를 자식 요소 이름으로 바꿀 때도 마찬가지입니다. 접두사를 두거나 어떤 요소도 쓰지 않는 텍스트 키를 고르세요.

  • 순서와 혼합 텍스트는 보존되지 않음

    JSON 객체는 키별로 값을 모으므로 <a/><b/><a/>는 배열인 a 다음에 b가 됩니다. 혼합 콘텐츠의 텍스트는 한 키에 모입니다. JSON에서 원래 문서를 복원할 수 있다고 기대하지 마세요.

  • 주석, 처리 명령, 네임스페이스

    주석과 처리 명령은 버려집니다. 네임스페이스 접두사는 키 이름에 그대로 남고 xmlns 선언은 속성이 되며, 네임스페이스 URI로 해석하는 일은 없습니다.

자주 묻는 질문

XML 속성은 JSON에서 어떻게 표현되나요?

속성 접두사(기본 @)로 시작하는 키가 되어 id="7"은 "@id": 7이 됩니다. 접두사는 매핑 패널에서 바꾸거나 비울 수 있습니다.

반복되는 요소를 항상 배열로 받으려면?

자식 요소는 항상 배열로를 켜세요. <item>이 하나뿐이어도 항목 하나짜리 배열로 출력됩니다.

값이 어떤 곳은 숫자이고 어떤 곳은 문자열인 이유는?

타입 해석이 켜져 있으면 정확히 표현할 수 있는 불리언과 숫자만 타입이 붙습니다. 007 같은 값, 아주 긴 정수, 유효숫자가 15자리를 넘는 소수, 1e-999 같은 언더플로 지수, CDATA 내용은 문자열로 남습니다.

속성이 있는 요소의 텍스트는 어디로 가나요?

텍스트 키(기본 #text) 아래로 갑니다. value처럼 원하는 이름으로 바꿀 수 있습니다.

CDATA와 엔티티도 처리되나요?

네. &amp;, &lt; 같은 엔티티는 해독되고, CDATA 내용은 타입 해석 없이 텍스트로 들어갑니다.

SOAP 엔벨로프나 네임스페이스도 되나요?

일반 요소로 변환합니다. soap:Body 같은 정규 이름은 키로 남고 네임스페이스 URI로 해석하지 않지만, soap은 해당 요소나 조상에서 xmlns:soap로 선언해야 합니다. 미리 정의된 xml 접두사만 선언 없이 쓸 수 있습니다.

XML이 어딘가로 업로드되나요?

아니요. 파싱과 변환이 브라우저 탭 안에서 실행되며 최대 20 MiB까지 처리합니다.

마지막 업데이트: