본문으로 건너뛰기
jsonbeautifiers
한국어

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로 갔다가 되돌아올 수 있나요?
이 매핑 범위 안에 있는 문서라면 됩니다. 다시 써야 했던 키 이름은 돌아오지 않고, 요소 하나짜리 배열과 단일 값의 구분도 돌아오지 않습니다. 둘 다 요소 하나를 만들기 때문입니다.