개발자 도구 · 구문 변환기
JSON에서 XML로의 변환: 루트 요소, 배열 및 잘못된 태그 이름
· 작동 방식
JSON xml 데이터 형식
JSON는 숫자로 시작하거나 공백을 포함하는 키가 있는 기본 배열일 수 있으며 XML에서는 허용되지 않습니다. 이 게시물에서는 출력을 예측할 수 있도록 변환기가 루트, 배열 및 이름에 대해 내려야 하는 결정을 설명합니다.
이름이 없는 배열 — 단일 루트 XML 문서가 되어야 하는 최상위 JSON 배열 및 나타나는 래퍼 요소
JSON는 `[1,2]`로 시작할 수 있습니다. XML는 두 개의 피어 문서 요소로 시작할 수 없습니다. 따라서 ToolAcre는 선택한 루트 이름으로 루트 배열을 래핑하고 각 구성원을 반복되는 `<item>` 하위 항목으로 씁니다. 래퍼 및 항목 이름이 소스에 존재하지 않기 때문에 규칙에 따른 경고 이름입니다.
`numbers`을 선택하면 두 개의 항목 요소가 포함된 하나의 `<numbers>` 문서 요소가 생성됩니다. 변환은 결정적이지만 정식은 아닙니다. 다른 시스템에서는 `<number>` 또는 특성 포함 컬렉션이 필요할 수 있습니다. 의도적으로 루트를 설정하고 그 결과를 수신자의 필수 XML 계약과 비교하세요.
XML에는 정확히 하나의 루트가 필요합니다. 모든 변환이 루트 요소 이름을 고안하거나 요구하는 이유
XML 문서에는 정확히 하나의 루트 요소가 있어야 합니다. 정확히 하나의 일반 최상위 키가 있는 JSON 객체는 해당 키를 직접 사용할 수 있습니다. 다중 키 객체, 배열, 스칼라 또는 null에는 제공된 단일 이름이 없으므로 사용자가 다른 법적 이름을 제공하지 않는 한 작성자는 이를 `root`로 묶습니다.
래퍼 규칙은 직렬화 전에 구현되며 경고로 표시됩니다. 이는 스키마에 의해 발견되지 않으며 `<root>`이 레거시 서비스에 의미가 있다고 주장하지 않습니다. 엔벨로프의 이름을 지정하는 것은 통합 설계의 일부인 반면 변환기는 자체 매핑에서 올바른 구조만 보장합니다.
배열에는 XML 해당 항목이 없습니다. 항목당 요소 반복 및 스칼라 배열과 배열 배열이 표현되는 방식
배열은 반복되는 요소가 됩니다. 문서 루트에서 구성원은 래퍼 아래에 있는 `<item>`을 사용합니다. 객체 내부에서 `line` 아래에 저장된 배열은 반복되는 `<line>` 형제가 됩니다. 객체 배열은 하위 필드가 있는 반복 요소를 생성합니다. 중첩 배열에는 도메인 이름이 없으며 빌더에서 생성된 일반 구조를 상속합니다.
이는 나중에 XML에서 JSON로 읽은 후 하나의 배열 멤버와 동일한 요소 이름을 가진 스칼라 간의 구별을 잃습니다. XML는 독립 배열 마커가 아닌 발생을 제공합니다. 안정적인 카디널리티가 중요한 경우 스키마 또는 애플리케이션 매핑이 이를 제공해야 합니다. 일반 직렬 변환기는 JSON 모양의 요소 이름만으로는 이를 증명할 수 없습니다.
요소 이름이 될 수 없는 키 — 숫자로 시작하거나 공백이나 구두점을 포함하거나 'xml'로 시작하는 이름과 변환기가 이름을 바꾸거나 이스케이프하는 방법
개요 제안 변환기는 잘못된 키의 이름을 바꾸거나 이스케이프할 수 있습니다. ToolAcre는 이를 명시적으로 거부합니다. 공백이 있는 키, 숫자나 하이픈으로 시작하는 키 또는 예약 문자 `xml`로 시작하는 키는 `UNSUPPORTED_SHAPE`을 트리거하고 잘못된 경로의 이름을 지정합니다. 자동 이름 변경으로 인해 합의된 스키마와 일치하지 않는 XML가 생성됩니다.
유효한 이름은 문자, 밑줄 또는 네임스페이스 스타일 접두사로 시작할 수 있으며 시작 뒤에 숫자, 마침표, 밑줄, 콜론 및 하이픈을 포함할 수 있습니다. 속성 키는 JSON 규칙으로만 `@`을 사용합니다. 나머지 속성 이름은 동일한 검사를 통과해야 합니다. 의도적으로 소스 키의 이름을 바꾸거나 다른 대상 형식을 선택하십시오.
요소 이름이 될 수 없는 키는 거부되며 이름이 변경되거나 이스케이프되지 않습니다.
숫자와 부울은 요소 텍스트로 직렬화되므로 해당 JSON 유형은 더 이상 XML에 의해 선언되지 않습니다. 결과적으로 기본 역방향 판독기는 문자열을 반환합니다. 여기서 Null에는 XML 표현이 없습니다. Null은 빈 문자열과 구별할 수 없는 빈 요소가 되며 작성자는 해당 변경이 발생한 값 수를 보고합니다.
이는 `{ "a": null, "b": "" }`가 비슷하게 읽는 두 개의 빈 요소를 생성할 수 있음을 의미합니다. 왕복 무손실이라고 부르는 것은 거짓입니다. `#text` 및 `#cdata` 속성은 변환기의 구조적 규칙을 유지하지만 일반적인 XML 유형 시스템을 추가하지 않습니다.
유형은 XML 텍스트가 되고, null은 허용되는 빈 요소 모호성이 됩니다.
`{"order":{"@id":"A-7","customer":"Ada","line":[{"sku":"P1","qty":2},{"sku":"P2","qty":1}],"note":null}}`을(를) 사용하세요. 단일 `order` 키는 루트가 되고, `@id`는 속성이 되고, 각 줄 개체는 반복되는 `<line>`이 되며, null은 경고와 함께 빈 `<note></note>`이 됩니다.
추론이 비활성화된 상태에서 출력을 다시 읽습니다. 속성 id, 수량, 텍스트 값은 문자열이고, line은 두 번 나타나므로 배열입니다. 이는 손실된 null 및 숫자 유형을 노출하면서 지원되는 정확한 역수를 보여줍니다. 수신 주문 스키마는 이 예에서 유효성을 검사하지 않는 다른 이름이나 순서를 요구할 수 있습니다.
여기서 다루지 않는 내용 — 지정된 XSD 또는 네임스페이스와 일치하는 XML 생성(직접 작성한 매핑이 필요함)
작성자는 XSD를 사용하거나 네임스페이스 URI를 할당하거나 비즈니스 스키마에서 요소 순서를 결정하지 않습니다. XML 선언을 작성하고 DOCTYPE을 내보내지 않습니다. 네임스페이스 접두사가 포함된 키는 문자 그대로 보존되지만 이는 네임스페이스 확인이나 접두사가 올바르게 선언되었다는 증거는 아닙니다.
특정 서비스에서 허용되는 XML을 생성하려면 속성, 시퀀스 제약 조건, 선택 그룹 및 정규화된 이름이 필요할 수 있습니다. 현재 스키마나 문서를 사용하여 해당 매핑을 구축하세요. 일반 변환은 계약 인식 일련화를 대체하지 않고 검사 및 간단한 데이터 중심 문서에 적합합니다.
요약: 의존하기 전에 모양을 예측하고 구문 변환기 패널이 JSON 문서가 생성하는 XML 구조를 표시하는 방법을 예측합니다.
결과에 따라 봉투, 품목 이름 및 유형 손실을 예측하십시오. ToolAcre는 루트가 하나도 없는 값을 래핑하고, 배열을 반복하고, `@` 키를 속성에 매핑하고, null을 빈 텍스트로 바꾸고, 교체를 추측하는 대신 잘못된 이름을 거부합니다. 명확하지 않은 모든 변경 사항은 출력이나 경고에 나타납니다.
최상위 배열, 반복 레코드, Null, 숫자 텍스트 및 어색한 키를 포함하는 가장 작은 개체를 테스트합니다. 거부는 수동 매핑이 필요하다는 유용한 증거입니다. 올바른 형식의 XML과 스키마에 유효한 XML은 서로 다른 클레임이므로 성공적인 파일에는 실제 수신자의 유효성 검사가 필요합니다.
수신자가 표본을 수락한 후 매핑이 유지될 것으로 예상되는 곳에만 역검사를 추가합니다. 속성과 반복되는 하위 항목은 ToolAcre 자체 규칙에 따라 왕복할 수 있지만 null 및 스칼라 유형은 왕복할 수 없습니다. 이러한 구별을 기록하면 성공적인 행복 경로 예시가 통합에서 생성할 수 있는 모든 주문 문서에 일반화되는 것을 방지할 수 있습니다.