JSON 轉 XML 工具
什麼是 JSON 轉 XML?
JSON 轉 XML 工具會把結構化 JSON 資料轉換成 XML 標記,方便在使用不同交換格式的系統之間傳遞資訊。JSON 使用物件、陣列、數字、字串、布林值和 null,而 XML 使用元素、屬性、文字節點和命名空間,因此轉換並不總是一一對應。陣列命名、屬性映射、空值、特殊字元和順序都需要合理表達。這個工具適合 SOAP 相關整合、舊企業系統、資料遷移、測試 payload 和文件範例。用於正式介面時,仍應根據目標 XSD、API 契約或合作方格式進行校驗,因為格式正確的 XML 不一定就是業務可接受的資料。
使用方式
使用方式
- 在左側輸入框貼上或輸入 JSON 資料
- 可自訂根元素名稱
- 選擇縮排大小(2 個空格、4 個空格或 Tab)
- 轉換後的 XML 會在右側顯示並套用語法高亮
- 點選「複製」或「下載」即可儲存結果
轉換檢查
- 轉換後請檢查陣列、null 值及類屬性欄位;JSON 與 XML 的資料模型不完全相同。
- 將 XML 貼入 API 請求、設定檔或測試資料前,請先確認根元素名稱是否穩定。
使用場景
技術原理
JSON(RFC 8259,源自 JavaScript 物件字面值)和 XML(W3C XML 1.0,原始版本 1998 年)都是樹狀結構的序列化格式,但語法不同。JSON 具有物件(字串鍵的鍵值映射)、陣列(有序列表)和六種純量型別(string、number、boolean、null 及結構型別)。XML 具有元素(起始/結束標籤對,內含文字或子元素)、屬性(起始標籤上的名稱值對)、文字節點、註解、處理指令和 CDATA 區段。這個轉換是一個結構性變換,沒有標準答案——每個現有慣例(BadgerFish、JSONML、SOAP/RPC 編碼、OOXML 的扁平 Schema、XBRL 的 linkbase 格式)都是針對相同輸入的不同規則。 「屬性 vs 子元素」的決策是核心歧義。JSON 的元資料只存在於鍵名中,因此像 `{"id": "42", "name": "Alice", "admin": true}` 這樣的 JSON 物件並不說明哪些鍵是「元資料」、哪些是「資料」。三種常見慣例:(1) 頁面的預設——純量值成為文字內容,而巢狀屬性包(由僅包含純量值的非陣列物件識別)的原始 JSON 鍵成為帶有 `@` 前綴的 XML 屬性(BadgerFish 慣例)。(2) JSONML——每個 JSON 物件成為一個元素,鍵 'tag' 作為元素名稱,鍵 'attr' 作為屬性映射,子條目作為子元素。(3) oData / Atom——JSON 物件成為元素,陣列透過陣列名稱包裝元素內聯。每種規則對某些下游消費者來說是正確的,對另一些來說是錯誤的,這就是為什麼沒有任何 XML 轉換器能被普遍接受。 陣列是第二個歧義。JSON 陣列是有序列表;XML 沒有原生的陣列型別。三種標準解法:(a) 重複子元素(頁面的預設,OOXML/SOAP 慣例):`[1, 2, 3]` → `<root><item>1</item><item>2</item><item>3</item></root>`。(b) 包裝在容器中:`<root><items><item>1</item>...</items></root>`。(c) 將陣列編碼為單一分隔字串並記錄分隔符(XML 內的 CSV,僅在消費者解析時使用)。每種方式對應不同的下游 XSD;轉換步驟需要知道應輸出哪一種。 XML 元素名稱必須是合法的 QName 標記(XML 1.0 §2.3 / XML Namespaces 1.0 §3):以字母、底線或冒號開頭,後接字母、數字、連字號、底線、句點或冒號。JSON 允許像 '123' 或 'first name' 這樣的鍵,違反此規則——轉換器必須將其重新命名(slugify 為 first_name、加底線前綴)或失敗。JSON 字串內容在元素文字和屬性值中也需要實體轉義:`&` → `&`、`<` → `<`、`>` → `>`(在較舊的 XML 中僅文字需要,但始終安全)、`"` → `"`、`'` → `'`,以及編碼範圍外的任何字元以 `&#xHHHH;` 表示。五個內建實體加上數值字元引用在 XML 中是強制的;HTML 的額外命名實體(` `、`©`)在純 XML 中未定義,需要明確的 DOCTYPE。 輸出文件還需要序言和命名空間宣告:首先是 `<?xml version="1.0" encoding="UTF-8"?>`,然後是任何 xmlns 宣告。如果目標系統使用命名空間(SOAP 使用 `http://www.w3.org/2003/05/soap-envelope`,XSLT 使用 `http://www.w3.org/1999/XSL/Transform`),前綴映射會作為 `xmlns:prefix="uri"` 屬性加入在根元素上。JSON 沒有命名空間概念,因此使用哪個 URI 取決於專案。對於空值,JSON null 通常表示為 `<key xsi:nil="true"/>`(XML Schema 慣例)或 `<key></key>`(空元素慣例)。轉換器選擇其中一種;正確答案取決於消費者的 XSD 驗證。 對於反向轉換(XML → JSON),同樣的歧義反向存在:屬性在 BadgerFish 中映射為 `@attributes` 鍵,CDATA 映射為 `$` 或 `#text` 鍵,混合內容元素(文字和子元素交錯)沒有乾淨的 JSON 表示,通常被發出為字串串接。實際的轉換器總是暴露「屬性鍵」、「文字鍵」、「陣列包裝」選項——這是無法避免的。
- JSON(RFC 8259)和 XML(W3C XML 1.0,1998 年)都是樹狀結構的序列化格式;轉換是結構性變換,沒有標準答案,因此多種慣例(BadgerFish、JSONML、SOAP、OOXML)對相同輸入共存。
- 屬性 vs 子元素:純量值預設為文字內容;巢狀屬性包物件(僅含純量值)成為帶 @ 前綴的屬性(BadgerFish)。JSONML 使用 'tag' / 'attr' 鍵。oData / Atom 使用包裝元素。
- 陣列:頁面預設重複子元素(OOXML/SOAP 慣例)。替代方案:包裝在容器元素中,或編碼為分隔字串。JSON 的陣列順序在 XML 輸出中被保留。
- XML 元素名稱規則:必須以字母、底線或冒號開頭,後接字母/數字/連字號/底線/句點/冒號(XML 1.0 §2.3)。JSON 鍵如 '123' 或 'first name' 是無效的 XML 名稱,必須 slugify 或拒絕。
- 實體轉義:`&` → `&`、`<` → `<`、`>` → `>`、`"` → `"`、`'` → `'`、其他編碼字元以 `&#xHHHH;` 表示。5 個內建實體是強制的;HTML 額外實體如 ` ` 需要明確的 DOCTYPE。
- 文件序言:`<?xml version="1.0" encoding="UTF-8"?>` 是標準的第一行。根元素上的 xmlns 宣告宣告命名空間前綴;JSON 沒有命名空間概念,因此由轉換器按專案選擇。
- JSON null → XML:`<key xsi:nil="true"/>`(XML Schema 慣例)或 `<key></key>`(空元素)。選擇必須與消費者的 XSD 匹配,否則驗證失敗。
- 反向轉換 XML → JSON 存在相同的歧義:CDATA 區段成為 `$` 或 `#text` 鍵(BadgerFish),混合內容元素(文字和子元素交錯)沒有乾淨的 JSON 形式,通常被串接為字串。
範例
物件 -> 元素
{"name": "Alice"}
->
<root>
<name>Alice</name>
</root>陣列 -> 元素
[1, 2, 3]
->
<root>
<item>1</item>
<item>2</item>
<item>3</item>
</root>巢狀結構
{"user": {"name": "Alice", "age": 25}}
->
<root>
<user>
<name>Alice</name>
<age>25</age>
</user>
</root>常見問題
轉換器如何將 JSON 對應到 XML?
每個 JSON 物件會變成一個 XML 元素。物件的鍵會變成子元素名稱;原始型別的值會變成元素內的文字。陣列則會把父元素重複多次。文字中的特殊字元會被轉義(& → &、< → <)。
為什麼 JSON 轉 XML 不一定無損?
JSON 有明確的數字、布林、null 型別;XML 只有文字。JSON 允許鍵帶有空格或特殊字元;XML 元素名稱不行。最外層的陣列在 XML 中也沒有顯而易見的對應。本頁會用一些啟發式做法(包一層 root 元素、消毒不合法的鍵)來彌補這些落差。
陣列在 XML 中如何呈現?
每個陣列元素會變成同名的兄弟元素。[{a:1},{a:2}] → <items><item><a>1</a></item><item><a>2</a></item></items>。包裹方式可以調整;部分頁面允許您明確指定單數元素的名稱。
若 JSON 鍵不是合法的 XML 名稱怎麼辦?
XML 元素名稱不能以數字開頭、不能含空白,也不能包含某些符號。本頁會以底線取代不合法字元,或用 CDATA 包裝。結果是合法的 XML,但無法精確地還原回原本的 JSON。
JSON 的 null 與布林值會被保留嗎?
null 會視設定而變成空元素或乾脆省略。true/false 會變成字面文字 'true' 或 'false'。XML 並沒有對應這些型別的標準——下游的解析器必須自行套用型別判讀規則。
可以加入 XML 屬性嗎?
JSON 沒有屬性的概念,所以產生器預設都會輸出成元素。部分轉換器會用特殊鍵字首(例如 '@id')來表示屬性——若屬性輸出對您的 XML schema 很重要,請查看頁面選項。
轉換是在本機進行嗎?
是。JSON 解析與 XML 產生都在您的瀏覽器中發生。輸入內容不會被上傳。