Command Palette

Search for a command to run...

JSON-XML 변환기: 키, 속성 및 배열을 올바르게 매핑하는 방법

JSON-XML 변환기: 키, 속성 및 배열을 올바르게 매핑하는 방법

T
Toolz Team
|Jul 20, 2026|16 최소 읽기

데이터 도구 모음의 일부

두 모델은 정렬되지 않습니다: RFC 8259 속성 없이 6개의 JSON 유형을 정의합니다 XML 1.0 속성,네임스페이스 및 정렬된 혼합 콘텐츠가 있습니다. 이 방향으로 가는 것은 차이를 어떻게 처리할지 선택하는 것을 의미합니다.

내가 처음으로 JSON 데이터를 XML 만 말하는 시스템으로 보내야 했을 때,나는 순진한 일을 했다: 나는 텍스트 편집기에서 앵글 괄호를 손으로 썼다. 그것은 SOAP 같은 봉투를 기대하는 공급자 피드였고,내 소스는 Laravel API 에서 나오는 깔끔한 JSON 배열이었다. 20 분 만에,나는 40 번째 레코드 주위 어딘가에서 닫는 태그를 일치하지 않았고 수신 파서는 "junk after document element" 나에게 아무 것도 알려주지 않는 오류 어디니다. 그날 저녁은 제가 모든 통합에 적용한 교훈을 가르쳐 주었습니다: JSON 과 XML 간의 변환은 창조적인 행위가 아닙니다. 적은 수의 규칙으로 매핑 문제이며,그 규칙을 적는 순간 전체가 기계적이 됩니다.

이 가이드는 I'd 가 가지고 있었으면 하는 그 매핑의 버전입니다. [Toolz.dev](/를 빌드하고,거기에 있는 도구 중 하나는 브라우저 기반입니다 JSON-XML 변환기 그것은 정확하게 아래의 관례를 적용합니다. 그러나이 기사의 요점은 버튼이 아닙니다 - it's 이해 열쇠가 요소가 되는 이유, why an @-prefixed key 는 속성이 되고,왜 배열이 번호가 매겨진 목록이 아닌 반복되는 태그로 바뀌는지. 그 세 가지 아이디어가 클릭되면,필요하다면 손으로 어떤 JSON 이라도 XML 로 변환할 수 있고,다운스트림 시스템이 거부하면 출력을 디버깅할 수 있다.

TL;DR: JSON을 XML로 변환하려면 각 개체 키를 각 요소에 매핑합니다 @-부모 요소의 속성에 접두사 키를 지정합니다 #text key to the element&#39;s 텍스트 내용. 모든 배열을 key&#39;s 이름을 공유하는 반복되는 형제 요소로 확장합니다. 이스케이프 &, <, 그리고 > 텍스트로(플러스) " 속성 값에서), 그리고 합법적 인 XML 이름 isn&#39;t 어떤 키를 sanitize. 토큰이나 고객 데이터로 페이로드가 기계를 떠나지 않도록 브라우저에서 수행.

애초에 JSON을 XML로 변환하려는 이유는 무엇입니까?

JSON 은 몇 년 전에 웹 API 전쟁에서 승리했으며 React,Laravel 또는 Node 에서 하루를 보낸다면 합리적으로 언제 you&#39;d 가 XML 을 전혀 필요로하는지 물어볼 수 있습니다. 대답은: 끊임없이,당신이 보는 장소에 있지 않습니다. XML 은 JSON 시대 이전에 설치된 거대한 시스템 설치 기반의 링구아 프랑카이며 아무데도 가지 않습니다. SOAP 웹 서비스 - 여전히 은행,보험, 물류 및 정부 통합의 중추 -는 XML 로 페이로드를 운반합니다. RSS 및 Atom 피드는 XML 입니다. 사이트 맵은 XML 입니다. 안드로이드 레이아웃, .docx 그리고 .xlsx 내부 (Office Open XML), SVG,RSS 팟캐스트 피드,수많은 B2B EDI 스타일 교환은 모두 XML 입니다.

그래서 실제 시나리오는 거의 항상 같은 모양입니다: 데이터가 있습니다 에서 JSON 왜냐하면 that&#39;s 는 당신의 스택이 생산하는 것이고,당신은 그것을 필요로 하기 때문이다 에서 XML 왜냐하면 that&#39;s 는 상대방이 요구하는 것입니다. 어쩌면 you&#39;re 는 XML 피드만 허용하는 마켓플레이스로 제품 데이터를 밀어 넣습니다. 어쩌면 you&#39;re 는 SOAP 본문에서 API 응답을 래핑합니다. 어쩌면 you&#39;re 는 JSON 콘텐츠 내보내기에서 RSS 피드를 생성합니다. 모든 경우에 don&#39;t 는 매번 직렬화를 다시 발명하기를 원합니다 - 모든 JSON 구조를 유효한 XML 로 바꾸는 예측 가능한 규칙을 원하므로 자동화하고 생각을 멈출 수 있습니다.

There&#39;s 는 또한 더 조용한 이유: 디버깅 중 가독성. you&#39;re 가 계층 구조를 이해하려고 깊이 중첩된 JSON 블롭을 응시할 때 들여쓰기된 XML 로 변환하면 때때로 트리 구조가 튀어나오게 되는데,이는 XML&#39;s 열기/닫기 태그가 JSON&#39;s 가 don&#39;t 를 중첩하는 방식으로 중첩을 명시적으로 유지하기 때문입니다 JSON-XML 변환기 그리고 그 반대 XML 에서 JSON 변환기 I&#39;d 가 추측한 것보다 더 자주 인접한 탭에서 열기.

JSON은 정확히 어떻게 XML에 매핑됩니까?

여기에 그 핵심이 있습니다. 규칙은 네 가지뿐이고,그 외의 모든 것은 세부사항입니다.

규칙 1: 개체 키가 요소가 됩니다. JSON 객체 { "book": { "title": "..." } } 된다 <book><title>...</title></book>. 열쇠는 꼬리표 이름입니다; 가치는 안쪽으로 가는 무슨입니다.

규칙 2: @-접두사 키가 속성이 됩니다. XML 요소는 속성을 전달할 수 있으며 JSON 에는 해당 속성에 대한 기본 개념이 없으므로 규칙이 필요합니다. 널리 사용되는 것 - 그리고 내 도구가 사용하는 것 - 은 접두사 문자,입니다 @ 기본적으로. 그래서 { "book": { "@id": "bk101", "title": "..." } } 된다 <book id="bk101"><title>...</title></book>. 속성은 기본 값(문자열, 숫자, 부울)만 보유할 수 있으며 중첩된 구조는 없으며 XML 속성이 실제로 작동하는 방식과 일치합니다.

규칙 3: The #text key 가 텍스트 콘텐츠가 됩니다. 요소가 필요할 때 둘 다 속성과 텍스트 - 생각 <title lang="en">Hello</title> - 당신은 can&#39;t 는 그것을 평이한 문자열 값으로 표현하는데,그 문자열은 속성을 위한 여지를 남기지 않기 때문입니다. 컨벤션은 예약된 키, #text: { "title": { "@lang": "en", "#text": "Hello" } }. 요소에 텍스트만 있고 속성이 없는 경우 건너뛸 수 있습니다 #text 그리고 그냥 평범한 문자열 값을 쓰면 됩니다.

규칙 4: 배열은 반복되는 요소가 된다. 이것은 사람들이 가장 자주 틀리는 것입니다. XML 에는 배열 유형이 없습니다. 사물의 목록은 동일한 태그 이름을 가진 반복 된 형제 요소로 표현됩니다. 그래서 { "tags": { "tag": ["computer", "web"] } } 된다 <tags><tag>computer</tag><tag>web</tag></tags> - 아니다 <tag>0</tag> 또는 어떤 색인 기반 넌센스. the array&#39;s 반복되는 태그 이름을 제공합니다.

그것들을 현실적인 객체에 합치면 출력은 다운스트림 XML 파서가 기대하는 것과 정확히 같습니다:

{
  "catalog": {
    "book": [
      { "@id": "bk101", "author": "Gambardella, Matthew", "price": 44.95 },
      { "@id": "bk102", "author": "Ralls, Kim", "price": 5.95 }
    ]
  }
}

된다

<?xml version="1.0" encoding="UTF-8"?>
<catalog>
  <book id="bk101">
    <author>Gambardella, Matthew</author>
    <price>44.95</price>
  </book>
  <book id="bk102">
    <author>Ralls, Kim</author>
    <price>5.95</price>
  </book>
</catalog>

단일 최상위 키인 catalog는,document&#39;s 루트 요소가 되었습니다. That&#39;s 고의: 잘 구성된 XML 문서는 정확히 하나의 루트를 가져야 합니다. JSON 이 이미 단일 래핑 키를 가지고 있을 때,그 키 이다 루트. 때 그것은 does&#39;t - 때 당신은 컨버터 멀티 키 개체 또는 베어 배열을 건네 - 도구는 구성 가능한 루트 요소 (아래 모든 것을 감싸root 기본적으로) 따라서 출력은 잘 형성되어 있습니다.

탈출 및 유효하지 않은 이름은 어떻습니까?

두 가지 조용히 어떤 중첩 버그 보다 더 많은 변환을 깰: 탈출 하지 않은 특수 문자와 불법 요소 이름.

탈출. XML 은 한 줌의 문자를 예약한다. inside element text, &, <, 그리고 > 로 표기해야 한다 &amp;, &lt;, 그리고 &gt;. 이중 인용 속성 값 안에는 추가로 이중 인용을 as에서 벗어나야 합니다 &quot;. JSON 문자열에 다음이 포함되어 있는 경우 Tom & Jerry 그리고 당신은 XML 원시로 드롭, 벌거 벗은 앰퍼샌드는 문서를 기형으로 만들고 파서는 죽는다. 올바른 변환기는 자동으로 탈출, 그래서 "a < b & c" 된다 a &lt; b &amp; c 출력에서 그리고 구문 분석할 때 원문으로 다시 왕복합니다. 이것은 선택적인 폴란드어가 아닙니다 - it&#39;s 유효한 XML 과 유효하지 않은 XML 의 차이.

요소 이름. XML 은 태그 이름이 포함할 수 있는 것에 대해 엄격한 규칙을 가지고 있습니다. Names can&#39;t 는 공백을 포함하고,can&#39;t 는 숫자,하이픈 또는 마침표로 시작하며 대부분의 구두점을 제외합니다. JSON 키에는 그러한 제한이 없습니다 - "first name", "123", 그리고 "total($)" 모두 완벽하게 합법적인 JSON 키와 모든 불법 XML 이름입니다. 이를 무시하는 변환기는 어떤 파서도 허용하지 않는 문서를 생성합니다. 실용적인 수정과 내 도구가 수행하는 작업은 삭제하는 것입니다: 불법 문자를 밑줄로 바꾸고 이름이 숫자로 시작하면 밑줄 앞에 붙입니다 "123 bad" 된다 <_123_bad>. It&#39;s 는 화려하지는 않지만 전체 포인트인 출력 파스를 보장합니다.

브라우저 기반 변환기는 어떻게 사용하나요?

워크플로가 시작되었습니다 Toolz.dev/tools/json-to-xml 실용적인 엣지 케이스에 대한 몇 가지 옵션과 함께 위의 규칙을 반영합니다.

입력에 JSON 을 붙여넣고 변환을 누릅니다. JSON 이 잘못된 형식이면 무음 가비지가 아닌 명확한 구문 분석 오류가 발생합니다. - I lean on the browser&#39;s own JSON.parse따라서 오류 메시지는 콘솔에서 볼 수 있는 you&#39;d 와 일치합니다. 사람이 읽을 수 있는 문서를 검토할 때 들여쓰기 공백 2~4 개를 선택하거나,you&#39;re 가 전선과 모든 바이트 카운트를 통해 전송할 때 전체 내용을 단일 줄로 축소하려면 Minify 를 선택합니다 (특히 SOAP 요청 및 피드 페이로드). JSON 에 단일 래핑 키가 없는 경우 루트 요소 이름을 설정합니다. XML 선언을 전환합니다 (<?xml version="1.0" encoding="UTF-8"?>소비자가 프롤로그를 기대하는지에 따라 on 또는 off. 그리고 빈 노드가 as 로 자체 닫혀야 하는지 결정합니다 <tag/> 또는 다음으로 확장합니다 <tag></tag> - 일부 엄격한 소비자가 관심을 갖고 있습니다.

모든 것이 클라이언트 측에서 실행됩니다. 변환기는 원격 API 를 감싸는 래퍼가 아니라 TypeScript 로 작성된 종속성이 없는 직렬화기입니다. 그것은 소리보다 더 중요합니다: API 응답 및 구성 파일에는 일상적으로 액세스 토큰,고객 기록 및 내부 식별자가 포함되어 있으며 &quot;free online converter&quot; that POST your payload to someone&#39;s 서버는 데이터 유출이 일어나기를 기다리고 있습니다. 이 것은 네트워크 호출을 하지 않기 때문에 민감한 데이터를 안전하게 변환할 수 있으며 전혀 연결되지 않은 상태로 계속 작동합니다. 브라우저 도구의 개인 정보 보호가 생각하는 것이라면 - 그리고 다른 사람&#39;s 데이터를 처리한다면,그것은 - 에 대해 더 많이 썼습니다 데이터 개인 정보 보호 도구 가이드.

JSON 대 XML: 빠른 비교

두 가지 형식을 유지하는 데 도움이 됩니다&#39; 장단점을 염두에 두십시오 이유 매핑에는 다음과 같은 규칙이 필요합니다 @ 그리고 #text XML이 JSON can&#39;t를 표현할 수 있고 그 반대의 경우도 마찬가지입니다.

측면 JSON XML
속성 네이티브 개념이 없습니다 일류 (<tag attr="v">)
배열/목록 원주민 [ ] 유형 반복되는 형제 요소
코멘트 허용되지 않음 <!-- ... --> 지원됨
네임스페이스 없음 전체 네임스페이스 지원
혼합 콘텐츠(텍스트 + 요소) 어색한 원주민
스키마/검증 JSON 스키마 (추가 기능) XSD, DTD, RELAX NG(성숙)
동사 컴팩트 더 장황하게(태그 닫기)
오늘날 일반적인 사용 웹 API, 구성 SOAP, 피드, 문서, 기업

X-1000 X 1000 X 1000 X 1000 X 1000 X 1000 X 1000 X 1000 X 1000 X 1000 X 1000 X 1000 X 1000 X 1000 X 1000 X 1000 X 1000 X 1000 X 1000 X 1000 X 1000 X 1000 X 1000 X 1000 X 10 @ 접두사는 &quot;attributes&quot; 행을 연결하기 위해 존재합니다.; 반복 태그 규칙은 &quot;arrays&quot; 행; 그리고 #text 브리지 &quot;mixed content&quot; 행. 매핑을 이러한 특정 간격을 가로지르는 브리지로 보면 임의적인 느낌이 멈춥니다.

JSON-XML 왕복은 깔끔하게 되나요?

대부분,예 - 그리고 that&#39;s 설계상. 나의 JSON에서 XML로 그리고 JSON 에 XML 을 도구는 동일한 공유 @ 속성 접두사 및 #text content key,그래서 XML → JSON 을 변환하고 다시 변환하는 것은 일반적으로 원본 문서를 재생산합니다. 만약 you&#39;re 가 데이터를 양방향으로 이동해야 하는 파이프라인을 구축한다면,그 대칭성은 의지할 가치가 있습니다.

라운드 트립이 퍼지되는 곳은 모든 JSON/XML 매핑이 퍼지되는 동일한 장소입니다: 순서 및 혼합 콘텐츠. JSON 객체는 공식적으로 순서가 지정되지 않았으므로 변환기는 이름이 다른 요소의 정확한 형제 순서를 보존하지 못할 수 있습니다. 텍스트 및 하위 요소를 인터리브하는 XML (<p>Hello <b>world</b>!</p>) doesn&#39;t 는 깨끗한 JSON 표현을 가지고 있고 근사치로 돌아옵니다. 그리고 때로는 한 번 나타나고 때로는 여러 번 나타나는 요소는 모호합니다 - 단일 값입니까 아니면 하나의 배열입니까? 이러한 aren&#39;t 버그는 특정 도구에 있습니다; they&#39;re 는 두 데이터 모델 don&#39;t 가 완벽하게 겹친다는 사실에 내재되어 있습니다. 솔기가 어디에 있는지 알면 변환이 무손실로 유지되도록 JSON 을 설계 할 수 있습니다: 사물이 항상 배열인지 여부에 대해 일관성을 유지하고 가능한 혼합 내용을 피하십시오.

JSON과 많이 협력한다면, 그것은&#39; 전환의 전체 가족에 걸쳐 유창성을 구축 할 가치가 있습니다 - 나는 내가 가장 많이 도달하는 것들을 수집했습니다 JSON 도구에 대한 궁극적 인 가이드, 그리고 더 넓습니다 코딩 도구 가이드 형식 변환기가 일상적인 워크플로우에 적합한 위치를 다룹니다. 역방향 및 인접 형식의 경우 JSON 에서 YAML 변환기 그리고 평야 JSON 포맷터 세트를 둥글게 처리하십시오.

JSON 을 XML 로 변환할 때 흔히 저지르는 실수

몇 가지 함정 I&#39;ve hit 또는 다른 사람이 때리는 것을 지켜 보았습니다:

배열 인덱스를 태그 이름으로 처리합니다. 만약 당신이 본다면 <item0>, <item1> someone&#39;s 출력에서,그들은 변환기를 잘못 빌드했습니다. 배열이 됩니다 반복됨 태그 같은 이름, array&#39;s 키에서 가져온 것입니다.

잊는 것은 하나의 뿌리만 있을 수 있다. 여러 키 개체를 래핑하지 않고 직렬화기에 바로 넘겨주면 여러 최상위 요소가 생성되며 이는 잘 구성된 문서가 아닙니다. 래핑.

&quot;데이터가 깨끗해 보이기 때문에 이스케이프 &quot;을 건너뜁니다 하나의 제품 설명에 앰퍼샌드 또는 a가 포함될 때까지 깨끗해 보입니다 <. 항상 탈출; 절대 가정하지 마세요.

구조화된 데이터를 속성에 넣습니다. 속성은 기본 요소를 보유합니다. 중첩된 개체를 an 에 밀어 넣으려고 하면 @-prefixed 키, 올바른 변환기는 그것을 떨어 뜨리거나 무시해야합니다 (그리고해야), 왜냐하면 there&#39;s 그것에 대한 유효한 XML이 없기 때문입니다. 대신 자식 요소로 모델링하십시오.

고급: 소비자를 위한 들여쓰기 및 선언 선택

통합 파트너와 계속해서 반복되는 습관을 구해준 습관 중 하나: 출력을 일치시키세요 정확히 소비자가 기대하는 대로 중지합니다. 일부 SOAP 끝점은 바이트 순서 표시 또는 예상치 못한 프롤로그가 포함된 문서를 거부합니다; 다른 사람들은 다음을 요구합니다 <?xml ... ?> 선언과 그것없이 415 당신. 일부 피드 유효성 검사기는 자신의 디버깅을 위해 예쁜 인쇄,인덴트 XML 을 원한다; 대부분의 생산 전송은 그것을 축소 원한다. 논쟁하기보다는,나는 사양이 요구하는 변형을 생성. That&#39;s 왜 변환기는 들여쓰기 (minify 옵션을 포함), 선언 토글,일류 컨트롤로 자기 폐쇄 동작을 노출 - they&#39;re 장식이 아니라,they&#39;re 까다로운 소비자가 첫 번째 시도에서 문서를 수락하는지 여부를 결정하는 손잡이.

자주 묻는 질문

json을 xml로 어떻게 변환합니까?

JSON 을 편집기에 붙여넣고 변환을 누릅니다. 개체 키가 XML 요소가 되고 배열이 반복되는 태그가 되며,그 결과는 복사하거나 다운로드할 준비가 된 것처럼 보입니다. 업로드가 없습니다 - 브라우저에서 변환이 발생합니다.

JSON 속성은 XML로 어떻게 표시됩니까?

관례적으로 &quot;@&quot; 접두사로 시작하는 모든 개체 키는 자식 요소가 아닌 부모 요소에 속성으로 작성됩니다. 예를 들어 {&quot;book&quot;: {&quot;@id&quot;: &quot;bk101&quot;, &quot;title&quot;: &quot;...&quot;}} 가 됩니다 .... 이는 XML to JSON 도구가 속성을 다시 읽는 방식을 반영합니다.

변환기는 JSON 배열을 어떻게 처리합니까?

배열의 각 요소는 key&#39;s 이름을 공유하는 반복된 형제 요소로 방출됩니다. 그래서 {&quot;tags&quot;: {&quot;tag&quot;: [&quot;a&quot;, &quot;b&quot;]}} 가 생산합니다 a이는 목록이 XML에서 일반적으로 표현되는 방식입니다. 항목당 번호가 매겨진 인덱스나 래퍼 요소가 없습니다.

#텍스트 키는 무엇을 위한 것입니까?

요소가 속성과 텍스트 내용을 모두 필요로 할 때,텍스트는 &quot;#text&quot; key 아래에 저장됩니다. {&quot;title&quot;: {&quot;@lang&quot;: &quot;en&quot;, &quot;#text&quot;: &quot;Hello&quot;}} 가 됩니다 안녕하세요. 요소에 텍스트만 있고 속성이 없는 경우 대신 일반 문자열 값을 사용할 수 있습니다.

들여쓰기 출력 대신 축소된 XML을 얻을 수 있습니까?

네. 들여쓰기를 0(미니화)으로 설정하면 변환기가 태그 사이에 공백이 없는 한 줄에 전체 문서를 내보냅니다. 이 기능은 페이로드 크기가 중요한 SOAP 요청이나 피드에 유용하며, 읽을 수 있는 문서가 필요할 때 2 또는 4개의 공백으로 다시 전환합니다.

유효한 XML 요소 이름이 아닌 키는 어떻게 됩니까?

XML 요소 이름은 공백을 포함할 수 없고 숫자,하이픈 또는 마침표로 시작할 수 없으며 대부분의 구두점을 제외합니다. 이러한 규칙을 위반하는 키는 삭제됩니다. 유효하지 않은 문자는 밑줄이 되고 필요할 때 선행 밑줄이 추가됩니다. 따라서 JSON 키가 XML 친화적이지 않은 경우에도 출력은 항상 구문 분석됩니다.

XML to JSON 도구를 사용하여 JSON을 XML로 왕복합니까?

일반적인 구조에 대해 그것은 않습니다. 이 도구와 XML to JSON 도구는 동일한 &quot;@&quot; 속성 접두사와 &quot;#text&quot; content 키를 공유하므로 XML 을 JSON 으로 변환하고 다시 변환하면 일반적으로 동일한 문서가 재생산됩니다. 순서 독립적인 세부 정보와 혼합 콘텐츠는 모든 XML/JSON 매핑과 마찬가지로 작은 차이의 일반적인 소스입니다.

여기서 민감한 JSON을 변환하는 것이 안전합니까?

예. 변환기는 브라우저에서 완전히 실행되는 일반 JavaScript 입니다 - 붙여 넣기 한 것은 서버로 전송되거나 기록되거나 저장되지 않습니다. 따라서 API 응답,구성 파일 및 토큰이나 개인 데이터가 포함 된 레코드에 안전하며 네트워크 연결없이 계속 작동합니다.


Comments

0 comments

0/2000 characters

No comments yet. Be the first to share your thoughts!