JSON을 XML로 변환: 루트, 속성, 배열

XML은 단일 루트가 필요하고 리스트를 반복 요소로 표현합니다. @ 접두사 키를 속성에, #text를 요소 텍스트에 매핑하면 가역적인 변환을 얻을 수 있습니다.

루트 요소 고르기

XML은 단 하나의 루트만 허용합니다. JSON의 최상위 키가 하나라면 그것을 루트 요소로 쓰고, 아니라면 모든 내용을 합성 루트 요소로 감싸세요.

속성과 텍스트

@ 접두사를 가진 키는 속성이 되고, #text 키는 요소의 텍스트 내용이 됩니다. 이것은 XML ↔ JSON의 표준 관례와 맞물려 변환이 왕복 가능해집니다.

배열은 반복 요소가 된다

JSON 배열은 단일 요소가 되지 않습니다 — 각 항목이 같은 태그 이름을 가진 별도의 요소가 됩니다. XML이 목록을 반복으로 표현하기 때문입니다.

이스케이프

본문에서는 &, <, >를 이스케이프하고(속성 안의 큰따옴표도), XML 선언을 앞에 두어 출력이 완전한 문서가 되게 하세요.

네임스페이스와 접두사

XML 네임스페이스는 xmlns 또는 xmlns:prefix 속성으로 등장해 요소와 속성 이름을 한정합니다. JSON 친화적인 형태로는 그것들을 일반적인 @xmlns / @xmlns:prefix 속성 키로 다루고, soap:Envelope 같은 접두 이름은 그대로 키로 두세요 — 대부분의 변환기는 접두사를 문자 그대로 보존합니다.

자체 닫힘 vs 명시적 빈 요소

비어 있는 JSON 값은 자체 닫힘 태그(<note/>) 또는 비어 있는 쌍(<note></note>)으로 매핑할 수 있습니다. 둘 다 XML로는 등가이지만, 일부 다운스트림 파서가 한쪽을 잘 다루지 못합니다 — 컴팩트한 출력에는 자체 닫힘을, 소비자가 엄격하다는 것을 알 때는 명시적 쌍을 쓰세요.

왕복 시 고려 사항

XML의 일부 사실은 JSON 등가물이 없습니다: 속성 순서, 주석, 처리 명령, 그리고 비어 있는 요소와 없는 요소의 차이입니다. JSON으로 변환하고 수정한 뒤 다시 XML로 돌리면 이런 아티팩트는 사라진다고 생각하세요 — 서명 정규화가 중요한 곳에서는 왕복한 XML을 절대 사용하지 마세요.

XML 포매팅, 정리, 검증

같은 변환기는 XML 포매터・정리기・검증기 역할도 합니다: 아무 XML이나 붙여 넣고 To JSON을 누르면 well-formed 여부를 검사하고, To XML을 누르면 일관된 들여쓰기로 다시 출력합니다. 에디터에 XML 뷰어나 pretty-print 플러그인이 없을 때, 로컬 도구를 깔지 않고 XML을 정리하는 가장 간단한 방법입니다.