본문으로 건너뛰기

JSON XML 변환

JSON ⇄ XML

속성·배열·텍스트 노드 처리 방식을 정해 JSON과 XML을 상호 변환합니다.

XML을 JSON으로, 또 그 반대로 바꿉니다. 둘 사이에 표준 매핑은 없습니다. XML에는 속성과 순서 있는 혼합 내용과 네임스페이스가 있고 JSON에는 하나도 없습니다. 그래서 이 페이지는 관례를 숨기는 대신 고른 방식을 분명히 밝히고 바꿀 수 있게 합니다.

🔒 브라우저 안에서만 처리jsonxmlconvert
방향

속성은 `@id` 형태가 됩니다.

요소 자신의 텍스트가 들어갈 자리입니다.

XML

JSON

XML과 JSON 사이에 표준 매핑은 없습니다. 그래서 여기서 고른 방식을 분명히 밝힙니다. 속성은 @name 키가 되고, 요소 자신의 텍스트는 #text로 가며, 이름이 같은 형제는 배열이 됩니다. 마지막 것이 왕복에서 정보를 잃는 자리입니다. 원소가 하나뿐인 목록은 "항상 배열로"를 켜지 않으면 객체 하나로 돌아옵니다.

입력

215자

출력

399자

사용 방법

  1. 방향을 고릅니다

    양쪽이 입력을 따로 들고 있어서, 왔다 갔다 해도 붙여넣은 것이 사라지지 않습니다.

  2. 속성 접두사와 텍스트 키를 정합니다

    `@`와 `#text`가 널리 쓰이는 관례입니다(fast-xml-parser, xml2js 등이 씁니다). 만들어야 하는 JSON이 다른 걸 쓴다면, 나중에 후처리하는 대신 여기서 바꾸세요.

  3. JSON을 코드가 받는다면 항상 배열로를 켭니다

    이 매핑에서 정보가 새는 지점입니다. `<item>`이 하나면 객체, 둘이면 배열이 되고 받는 코드가 두 경우를 다 처리해야 합니다. 항상 배열로 두면 조금 장황해지는 대신 모양이 안정됩니다.

자주 묻는 질문

왕복하면 원래 XML이 그대로 돌아오나요?

구조로는 대체로, 바이트로는 아닙니다. 주석과 처리 명령, 그리고 `<a/>`와 `<a></a>`의 구분은 살아남지 않습니다. 텍스트와 요소가 번갈아 나오는 혼합 내용은 순서를 지키면서 JSON으로 표현할 방법이 없습니다.

`12`가 왜 문자열인가요?

XML에는 타입이 없기 때문입니다. 문서의 모든 값은 텍스트이고, 다르게 말해 주는 건 스키마뿐입니다. 변환 설정을 켜면 숫자와 불리언을 추측하지만 어디까지나 추측입니다. 상품 코드 `0123`은 123이 되고 버전 문자열 `1.10`은 1.1이 됩니다.

네임스페이스는 어떻게 되나요?

접두사는 요소 이름의 일부로 남습니다. `soap:Body`는 `soap:Body`라는 키가 되고, `xmlns` 선언은 평범한 속성으로 넘어옵니다. 네임스페이스 URI로 해석하지는 않기 때문에, 같은 네임스페이스를 다른 접두사로 쓴 두 문서는 서로 다른 JSON이 됩니다.

SOAP 응답을 넣어도 되나요?

됩니다. 이 페이지에 오는 흔한 이유 중 하나입니다. 봉투와 본문과 실제 내용이 중첩된 객체로 넘어오고, SOAP 속성들은 `@`가 붙은 키에 들어갑니다.

이 도구로 이어지는 것

다음 단계

이 도구의 결과를 그대로 받을 수 있는 도구들입니다.