JSON을 XML로
루트 요소를 고를 수 있는 올바른 형식의 XML. 속성과 이스케이프도 제대로 처리합니다.
JSON
XML
붙여 넣은 것은 여러분의 브라우저를 떠나지 않습니다. connect-src 허용 목록 덕분에 이는 약속이 아니라 브라우저가 강제하는 보장입니다. 직접 확인하기
JSON을 형식에 맞는 XML로 변환합니다. 루트 요소를 고를 수 있고, 속성을 지원하며, 이스케이프도 정확합니다.
두 데이터 모델은 정확히 겹치지 않으므로 이 변환은 몇 가지 판단을 내립니다. 여기에 그 목록이 있고, 여러분 문서에 해당할 때는 출력 노트에서도 알려 줍니다.
매핑이 동작하는 방식
- 객체 키는 요소가 됩니다
- "name"이라는 키는 <name> 요소가 됩니다.
- @가 붙은 키는 속성이 됩니다
- {"@id": "1"}은 감싸는 요소의 id="1"이 됩니다.
- #text 키는 요소의 텍스트가 됩니다
- 속성과 내용을 동시에 가진 요소를 만들 때 쓰는 방법입니다.
- 배열은 요소를 반복합니다
- XML이 목록을 표현하는 방식입니다. 직접 만들지 않는 한 별도의 감싸는 요소는 없습니다.
- null은 xsi:nil이 됩니다
- XML Schema의 관례입니다. 빈 요소로 두면 빈 문자열과 구별할 수 없게 됩니다.
XML 이름으로 유효하지 않은 키 이름
XML 요소 이름은 숫자로 시작할 수 없고 공백이나 대부분의 문장부호도 담을 수 없습니다. JSON 키는 둘 다 예사로 합니다. 그런 키는 밑줄로 바꿔 쓰고, 변환은 그 사실을 조용히 넘어가지 않고 알려 줍니다. 되돌려 변환해도 원래 이름은 복구되지 않기 때문입니다.
XML에는 있고 JSON에는 없는 것
네임스페이스, 처리 명령, JSON Schema보다 10년 앞선 스키마 언어, 주석, 그리고 속성과 자식 요소의 구분. 어느 것도 JSON을 거친 왕복에서 살아남지 못합니다. 그래서 JSON에서 XML로의 변환은 유효하되 손으로 쓴 XML보다 구조가 단순한 XML을 만들어 냅니다.
How to do this in code
코드에서의 변환.
py Python
import json
from dicttoxml import dicttoxml
xml = dicttoxml(json.loads(text), custom_root='root', attr_type=False)
# attr_type=False turns off the type="str" attributes dicttoxml
# adds to every element by default. js JavaScript
import { XMLBuilder } from 'fast-xml-parser';
const builder = new XMLBuilder({
format: true,
attributeNamePrefix: '@',
ignoreAttributes: false,
});
const xml = builder.build(JSON.parse(text)); cs C#
using Newtonsoft.Json;
XNode node = JsonConvert.DeserializeXNode(json, "root");
var xml = node.ToString(); 자주 묻는 질문
- xsi:nil 속성은 왜 붙나요?
- XML에는 null이 없기 때문입니다. XML Schema 관례는 그 속성으로 요소를 nil로 표시하고, 그래야 null이 빈 문자열과 구별됩니다. 빈 <field/>만으로는 둘 중 무엇인지 알 수 없습니다.
- JSON에서 XML로 갔다가 되돌아올 수 있나요?
- 이 매핑 범위 안에 있는 문서라면 됩니다. 다시 써야 했던 키 이름은 돌아오지 않고, 요소 하나짜리 배열과 단일 값의 구분도 돌아오지 않습니다. 둘 다 요소 하나를 만들기 때문입니다.