ToolAct工具行動

JSON 轉 XML 工具

JSON 輸入
XML 輸出
行數: 1字元數: 0字節數: 0
行數: 1字元數: 0字節數: 0

什麼是 JSON 轉 XML?

JSON 轉 XML 工具會把結構化 JSON 資料轉換成 XML 標記,方便在使用不同交換格式的系統之間傳遞資訊。JSON 使用物件、陣列、數字、字串、布林值和 null,而 XML 使用元素、屬性、文字節點和命名空間,因此轉換並不總是一一對應。陣列命名、屬性映射、空值、特殊字元和順序都需要合理表達。這個工具適合 SOAP 相關整合、舊企業系統、資料遷移、測試 payload 和文件範例。用於正式介面時,仍應根據目標 XSD、API 契約或合作方格式進行校驗,因為格式正確的 XML 不一定就是業務可接受的資料。

使用方式

使用方式

  1. 在左側輸入框貼上或輸入 JSON 資料
  2. 可自訂根元素名稱
  3. 選擇縮排大小(2 個空格、4 個空格或 Tab)
  4. 轉換後的 XML 會在右側顯示並套用語法高亮
  5. 點選「複製」或「下載」即可儲存結果

轉換檢查

  • 轉換後請檢查陣列、null 值及類屬性欄位;JSON 與 XML 的資料模型不完全相同。
  • 將 XML 貼入 API 請求、設定檔或測試資料前,請先確認根元素名稱是否穩定。

使用場景

為僅接受 XML 的系統轉換 JSON payload部分舊端點、匯入作業和供應商系統即使來源資料是 JSON 也仍然要求 XML。本轉換器讓你選擇根元素、將重複陣列值保留為重複的 item 節點,並在輸出前跳脫 XML 敏感字元。輸出適合用於 SOAP 請求封包、EDI 測試資料或任何尚未遷移到 JSON 的合作方 payload。
從結構化資料建立可讀的 XML 範例使用縮排選項將巢狀 JSON 範例轉為乾淨的 XML,適用於文件、工單或契約討論。無效或空的根元素名稱會被防禦性處理,避免小命名錯誤導致實驗失敗。帶縮排的格式在程式碼審查中比單行壓縮版更容易做差異比較。
手動編輯 XML 前先測試邊界情況null 值、空物件、空陣列、基本型別陣列和巢狀記錄會各自產生不同的 XML 結構。先將範例通過轉換器,再將結果貼入對應工具、SOAP 使用者端或匯入範本時,就能清楚看到這些選擇的影響。每次 Schema 變更後重新轉換,確保 XML 與 JSON 契約保持同步。
有意識地將 JSON 欄位映射為屬性或子元素選擇哪些欄位成為屬性、哪些成為子元素,因為部分舊 Schema 將 ID 類欄位視為屬性,而描述則作為元素。每次映射變更後重新執行,確認必要的屬性順序和命名空間前綴仍符合預期的 XSD。請記住 XML 文件中的屬性順序在語意上沒有意義,但元素順序可能被 XSD 的 sequence 約束所要求。
對照合作方的 XSD 驗證結果轉換後,將 XML 餵入 xmllint --schema 或線上 XSD 驗證器,檢查缺少的必要元素、錯誤的型別和排序規則,這些是轉換器本身無法強制執行的。格式正確的 XML 不等於下游合作方會接受的 XML,而屬性與元素的選擇會影響 XSD 認為哪些欄位是必填的。反覆調整 JSON 或轉換規則,直到驗證器報告完全匹配,再確認 payload。

技術原理

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 字串內容在元素文字和屬性值中也需要實體轉義:`&` → `&amp;`、`<` → `&lt;`、`>` → `&gt;`(在較舊的 XML 中僅文字需要,但始終安全)、`"` → `&quot;`、`'` → `&apos;`,以及編碼範圍外的任何字元以 `&#xHHHH;` 表示。五個內建實體加上數值字元引用在 XML 中是強制的;HTML 的額外命名實體(`&nbsp;`、`&copy;`)在純 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 或拒絕。
  • 實體轉義:`&` → `&amp;`、`<` → `&lt;`、`>` → `&gt;`、`"` → `&quot;`、`'` → `&apos;`、其他編碼字元以 `&#xHHHH;` 表示。5 個內建實體是強制的;HTML 額外實體如 `&nbsp;` 需要明確的 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"}
->
&lt;root>
  &lt;name>Alice&lt;/name>
&lt;/root>

陣列 -> 元素

[1, 2, 3]
->
&lt;root>
  &lt;item>1&lt;/item>
  &lt;item>2&lt;/item>
  &lt;item>3&lt;/item>
&lt;/root>

巢狀結構

{"user": {"name": "Alice", "age": 25}}
->
&lt;root>
  &lt;user>
    &lt;name>Alice&lt;/name>
    &lt;age>25&lt;/age>
  &lt;/user>
&lt;/root>

常見問題

轉換器如何將 JSON 對應到 XML?

每個 JSON 物件會變成一個 XML 元素。物件的鍵會變成子元素名稱;原始型別的值會變成元素內的文字。陣列則會把父元素重複多次。文字中的特殊字元會被轉義(& → &amp;、< → &lt;)。

為什麼 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 產生都在您的瀏覽器中發生。輸入內容不會被上傳。