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

XML JSON Schema 생성기

XML 문서를 JSON으로 바꾼 구조에 대한 JSON Schema를, 모든 반복 요소를 병합한 속성·타입·필수 키와 함께 추론합니다.

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

도구 작업 공간

예제

옵션

드래프트

샘플의 모든 객체에 있는 키를 필수로 봅니다.

XML → 데이터 매핑

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

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

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

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

XML 입력

21줄491byte

결과

⌘/Ctrl + Enter로 복사
결과 · schema.json
{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "title": "GeneratedSchema",
  "type": "object",
  "properties": {
    "order": {
      "type": "object",
      "properties": {
        "@id": {
          "type": "integer"
        },
        "@status": {
          "type": "string"
        },
        "customer": {
          "type": "object",
          "properties": {
            "@id": {
              "type": "integer"
            },
            "@vip": {
              "type": "boolean"
            },
            "name": {
              "type": "string"
            },
            "email": {
              "type": "string"
            }
          },
          "required": [
            "@id",
            "@vip",
            "name",
            "email"
          ],
          "additionalProperties": false
        },
        "items": {
          "type": "object",
          "properties": {
            "item": {
              "type": "array",
              "items": {
                "type": "object",
                "properties": {
                  "@sku": {
                    "type": "string"
                  },
                  "@qty": {
                    "type": "integer"
                  },
                  "name": {
                    "type": "string"
                  },
                  "price": {
                    "type": "number"
                  }
                },
                "required": [
                  "@sku",
                  "@qty",
                  "name",
                  "price"
                ],
                "additionalProperties": false
              }
            }
          },
          "required": [
            "item"
          ],
          "additionalProperties": false
        },
        "total": {
          "type": "number"
        },
        "shipped_at": {
          "type": "string"
        },
        "tracking": {
          "type": "string"
        }
      },
      "required": [
        "@id",
        "@status",
        "customer",
        "items",
        "total",
        "shipped_at",
        "tracking"
      ],
      "additionalProperties": false
    }
  },
  "required": [
    "order"
  ],
  "additionalProperties": false
}
타입5
크기2.2kB

XML 피드를 JSON으로 바꿨을 때, 변환된 데이터를 설명하는 스키마가 필요한 경우를 위한 XML JSON Schema 생성기입니다. API 게이트웨이, 폼 빌더, 데이터 파이프라인에서 검증할 때 쓸 수 있습니다. 페이지 안의 엄격한 XML 1.0 파서로 XML을 읽고 공통 XML 매핑 규칙으로 JSON에 대응시킨 뒤 그 결과에서 JSON Schema를 추론합니다. XML 오류는 줄과 열로 표시됩니다.

스키마가 설명하는 것은 XML 자체가 아니라 매핑된 JSON입니다. 속성은 접두사가 붙은 속성(property)이 되고, 속성 옆의 텍스트는 텍스트 키 아래에 놓이며, 루트 요소 이름이 유일한 최상위 속성이 됩니다. XML 문법 자체의 스키마가 필요하면 XML XSD 생성기를 쓰세요. 반복 요소는 병합됩니다. 반복되는 <user>는 모든 출현의 키 합집합을 items 스키마로 갖는 배열이 되고, 일부 출현에 없는 키는 필수가 아닙니다.

스키마 제목, Draft 2020-12 또는 Draft-07, 키를 필수로 표시할지, 추가 속성을 허용할지를 고를 수 있습니다. 모든 처리는 로컬에서 실행되고 최대 20 MiB를 받으며 업로드하지 않습니다. 스키마를 복사하거나 schema.json으로 내려받으세요.

사용 방법

  1. 대표성 있는 XML 샘플 붙여넣기

    예상되는 모든 요소와 속성이 있고 반복 요소가 여러 번 나오는 문서를 쓰세요. 스키마는 샘플에 보이는 것만 설명합니다.

  2. 매핑부터 정하기

    XML → 데이터 매핑 패널에서 속성 접두사, 텍스트 키, 단일 자식을 배열로 할지, 숫자와 불리언에 타입을 줄지 정하세요. 스키마는 이 선택을 따릅니다.

  3. 스키마 이름과 드래프트 선택

    스키마 제목을 입력하고 Draft 2020-12 또는 Draft-07을 고르세요. 드래프트에 따라 출력이 선언하는 $schema URI가 달라집니다.

  4. 필수 키와 추가 속성 결정

    키를 필수로 표시를 켜면 샘플의 모든 객체에 있는 키가 required에 나열됩니다. 추가 속성 허용을 켜면 additionalProperties가 true, 끄면 false입니다.

  5. 복사 또는 다운로드

    JSON Schema를 복사하거나 schema.json으로 내려받은 뒤, 같은 출처의 샘플 데이터로 검증기를 돌려 보세요.

작동 원리

무엇이 추론되는가

매핑된 값마다 스키마가 만들어집니다. 문자열은 "type": "string", 정수는 "integer", 소수는 "number", 불리언은 "boolean", 매핑된 객체는 properties를 가진 object, 배열은 items를 가진 array가 됩니다. 한 위치의 값들이 서로 다른 타입이면 타입이 ["string", "integer"] 같은 목록이 되거나, 객체와 기본 타입을 모두 허용합니다.

배열의 items 스키마는 모든 원소에서 만들어지는데, 여기서 병합이 일어납니다. 자식이 서로 다른 <user> 두 개는 키 합집합을 가진 객체 스키마 하나가 됩니다. 샘플의 모든 객체에 있는 키가 필수로 계산됩니다. 빈 요소는 문자열이므로 <b/>는 "type": "string"입니다.

XML 텍스트스키마 타입
<n>42</n>integer
<n>24.50</n>number
<n>true</n>boolean
<n>007</n>string
<n>1</n><n>x</n>[string, integer]의 배열
<n/>string

단일 요소인가 배열인가

XML만으로는 자식이 목록인지 알 수 없습니다. 자식 요소는 항상 배열로를 끈 상태에서는 샘플에 한 번 나온 요소가 객체나 값으로 설명되므로, 더 큰 문서에서 같은 요소가 반복되면 검증이 실패합니다. 스위치를 켜서 모든 자식 요소를 스키마에서 배열로 만들거나, 요소가 반복되는 샘플을 쓰세요.

스키마는 매핑 선택에서 만들어지므로 매핑을 먼저 바꾸세요. 접두사 @로 만든 스키마에는 @id 같은 속성이 있고, 접두사를 비우면 같은 속성이 id입니다. 이 생성기에서 Draft 2020-12와 Draft-07은 $schema 선언만 다르며, 쓰이는 키워드는 둘 다에서 유효합니다.

실제 예시

서로 다른 두 사용자 병합
입력
<users><user id="1"><name>a</name><email>x</email></user><user><name>b</name><age>3</age></user></users>
출력
{
  "$schema": "http://json-schema.org/draft-07/schema#",
  "title": "Users",
  "type": "object",
  "properties": {
    "users": {
      "type": "object",
      "properties": {
        "user": {
          "type": "array",
          "items": {
            "type": "object",
            "properties": {
              "id": {
                "type": "integer"
              },
              "name": {
                "type": "string"
              },
              "email": {
                "type": "string"
              },
              "age": {
                "type": "integer"
              }
            },
            "required": [
              "name"
            ],
            "additionalProperties": true
          }
        }
      },
      "required": [
        "user"
      ],
      "additionalProperties": true
    }
  },
  "required": [
    "users"
  ],
  "additionalProperties": true
}

설정은 속성 접두사 비움, 제목 Users, Draft-07, 추가 속성 허용입니다. 네 키가 모두 나타나고, 두 사용자 모두에 있는 name만 필수입니다.

섞인 값과 빈 요소
입력
<a><b/><c>1</c><c>x</c></a>
출력
{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "title": "A",
  "type": "object",
  "properties": {
    "a": {
      "type": "object",
      "properties": {
        "b": {
          "type": "string"
        },
        "c": {
          "type": "array",
          "items": {
            "type": [
              "string",
              "integer"
            ]
          }
        }
      },
      "required": [
        "b",
        "c"
      ],
      "additionalProperties": true
    }
  },
  "required": [
    "a"
  ],
  "additionalProperties": true
}

설정은 제목 A, 추가 속성 허용입니다. c 요소 둘이 정수와 문자열을 담고 있어 items가 두 타입을 모두 허용하고, 빈 b 요소는 문자열입니다.

단일 자식과 항상 배열
입력
<cart><item id="1"/></cart>
출력
"item": {
  "type": "array",
  "items": {
    "type": "object",
    "properties": {
      "id": {
        "type": "integer"
      }
    },
    "required": [
      "id"
    ],
    "additionalProperties": true
  }
}

설정은 접두사 비움, 항상 배열 켜짐, 필수 키 켜짐, 추가 속성 허용이며 item 속성 부분만 보여 줍니다. 배열 스위치가 꺼져 있으면 item은 같은 필수 id 속성을 가진 일반 객체 스키마가 됩니다.

자주 하는 실수

  • 요소 하나뿐인 샘플은 배열을 가림

    <item> 하나는 객체로 설명됩니다. 다른 문서에 item이 둘이면 스키마 검증에 실패합니다. 반복이 있는 샘플을 쓰거나 자식 요소는 항상 배열로를 켜세요.

  • 필수 여부도 샘플을 따름

    샘플의 모든 객체에 있는 키는 필수가 되는데, 작은 샘플에서는 실제 규칙보다 많을 수 있습니다. 느슨한 초안이 필요하면 키를 필수로 표시를 끄세요.

  • 숫자가 타입을 정함

    샘플에서 1인 필드는 다른 레코드에 1.5나 A7이 있어도 integer가 됩니다. 앞자리 0이 있는 우편번호는 문자열로 남습니다. 모든 말단을 문자열로 두려면 매핑 패널에서 타입 해석을 끄세요.

  • 스키마는 매핑된 JSON을 설명함

    @id, #text 같은 속성 이름은 매핑 설정에서 나옵니다. 검증기에는 원본 XML이 아니라 같은 설정으로 만든 JSON, 예를 들어 XML JSON 변환기의 출력이 들어가야 합니다.

  • format, 패턴, enum은 없음

    타입, 구조, 필수 키만 추론합니다. 데이터에 필요하면 format, pattern, enum, 길이 제한은 직접 추가하세요.

자주 묻는 질문

XML을 설명하나요, 변환된 JSON을 설명하나요?

변환된 JSON입니다. 속성은 속성 접두사가 붙은 property이고 속성 옆의 텍스트는 텍스트 키 아래에 있습니다. XML 자체의 스키마는 XML XSD 생성기를 쓰세요.

반복되는 요소는 어떻게 처리되나요?

모든 출현을 병합한 items 스키마를 가진 배열이 되어, 일부에만 있는 키는 나열되지만 필수는 아닙니다.

어떤 JSON Schema 드래프트를 지원하나요?

Draft 2020-12와 Draft-07입니다. 이 생성기에서는 선택에 따라 $schema URI만 달라지며, 쓰이는 키워드는 둘 다에서 유효합니다.

추가 속성 허용은 무엇을 하나요?

모든 객체 스키마의 additionalProperties를 true로 합니다. 끄면 false라서 모르는 키는 검증에 실패합니다.

값이 어떤 곳은 정수, 어떤 곳은 문자열인 이유는?

타입 해석이 켜져 있으면 정확히 정수, 소수, 불리언인 텍스트만 타입이 붙고 007 같은 값은 문자열로 남습니다. 모든 말단을 문자열로 두려면 해석을 끄세요.

XML이 업로드되나요?

아니요. 파싱과 스키마 생성이 브라우저 안에서 실행되며 최대 20 MiB까지 처리합니다.

마지막 업데이트: