§

輸入

模式
§

輸出

台灣與美國團隊每天都在橋接 XML 與 JSON,通常是因為技術棧的兩端對格式看法不同。美國衛生與公眾服務部以 XML 和 JSON 兩種格式發布 HL7 FHIR 資源。SOAP 服務仍以 XML 信封回應,而 React 前端想要 JSON。台灣的資料工程師在將資料送入 Snowflake 或 BigQuery 之前,也需要將 XML 格式的來源資料重塑為 JSON。每種情況的解決方案都相同:一個快速、本地的轉換器,可在不傳送資料的情況下對新的 payload 重新執行。

什麼是 XML ↔ JSON 轉換?

XML(可延伸標記語言)是一種基於標籤的階層資料文字格式。你會在 SOAP Web 服務、RSS 和 Atom 摘要、HL7 FHIR 健康紀錄、sitemap.xml 檔案,以及 Maven、Spring 和 Android Gradle 的設定檔中看到它。JSON(JavaScript 物件表示法,由 RFC 8259 定義)描述相同種類的巢套資料,但使用大括號和陣列而非開閉標籤。JSON 是幾乎每個 REST API 今日所使用的格式,也是每個瀏覽器執行時的原生值形狀。在兩種格式之間轉換,在碰到屬性、混合內容、重複子項和 CDATA 之前聽起來都是小事。自訂正規表示式是錯誤答案;真正的解析器才是正確答案。此工具附帶了一個真正的解析器(fast-xml-parser),並在你的瀏覽器中執行,因此你可以貼上舊有 SOAP 服務返回的 XML 信封,看著它成為可直接放入 Redux store 的 JSON 物件,或取一個在 REST 客戶端組裝的 JSON payload 並將其轉回企業端點仍期待的 XML 形狀。

XML ↔ JSON 映射是如何運作的?

每次轉換都在你的瀏覽器中使用捆綁的 fast-xml-parser 函式庫(MIT 授權,4.x 版)本地執行。高階映射規則為:

  1. 元素對應鍵:每個 XML 元素名稱成為 JSON 物件鍵。<user><name>Alice</name></user> 映射為 {"user":{"name":"Alice"}}
  2. 屬性對應帶前綴的鍵:屬性以加上所選前綴的鍵儲存。使用前綴 @ 時,<user id="1"> 產生 {"user":{"@id":"1"}}
  3. 文字內容對應文字節點鍵:當元素同時有屬性和文字時,文字置於所選的文字節點鍵下。含鍵 #text<price currency="USD">9.99</price> 產生 {"price":{"@currency":"USD","#text":"9.99"}}
  4. 重複子項對應陣列:當「強制重複子標籤為陣列」開啟時,具有相同名稱的多個兄弟元素折疊為 JSON 陣列。<items><item>A</item><item>B</item></items> 成為 {"items":{"item":["A","B"]}}
  5. CDATA 區段:<![CDATA[…]]> 內的原始文字保留在 #cdata 鍵下,因此角括號和連字號在來回轉換過程中不會被重新跳脫。
  6. JSON 轉 XML 反向映射:物件鍵成為元素,帶前綴的鍵成為屬性,陣列展開為重複的兄弟元素。

為何使用此工具轉換 XML 與 JSON?

  • 你的資料留在你的機器上。每次解析和建構都在此頁面的 JavaScript 上下文中執行。FHIR 病患 bundle、SOAP 認證信封、自有設定檔、帳單匯出——這些資料都不會觸及我們的伺服器,因為程式碼路徑中沒有上傳步驟。打開網路面板看看。
  • 將舊有 SOAP 接入以 REST 為核心的前端,是我們最常聽到的需求。銀行或保險公司公開的 SOAP 端點數年內都不會退役;呼叫它的 React 或 Vue 應用程式不想學 XML。貼上信封,取回帶有前綴屬性和保留命名空間的 JSON,然後將 Body 內容放入你的 state store。
  • RSS、Atom 和 sitemap 的消費者也能受益。播客目錄、新聞彙整器或用於消費 sitemap.xml 的內部儀表板,可以完全跳過撰寫 XML 解析器的步驟。一次性轉換摘要、以 JSON 陣列工作,讓你的客戶端程式碼繼續使用它已熟悉的語言。
  • 設定匯出是另一個場景。Maven、Spring、Android Gradle 和老式 Ant 建置都輸出 XML;而對面的雲端原生工具(Terraform、Ansible、GitHub Actions、cloud-init)讀取 JSON 或 YAML。在瀏覽器中轉換,而不必執行含第三方依賴的 Python 腳本,在無法貼入不明 Web 服務的隔離環境中尤其有用。

XML ↔ JSON 轉換有哪些常見應用場景?

橋接 XML 與 JSON 廣泛出現在整合工程、API 工具和資料工程中。幾種模式主導了工作量:

  • SOAP 轉 REST 橋接:從舊有銀行或保險 API 返回的 SOAP 信封中提取 Body payload 並轉換為 JSON,讓 React 或 Vue 前端無需前置伺服器代理即可使用。
  • FHIR 健康紀錄:將 HL7 FHIR XML bundle(HHS/ONC 和 NHS Digital 規定用於臨床資料交換的格式)轉換為 JSON,以便載入 MongoDB Atlas 集合或 PostgreSQL JSONB 欄供分析師查詢。
  • Sitemap 與摘要處理:將 sitemap.xml 或 RSS/Atom 摘要轉換為 JSON 陣列,讓自訂索引器、Slack bot 或儀表板 widget 能在不引入 XML 解析器依賴的情況下迭代條目。

XML ↔ JSON 來回轉換是什麼樣子?

以一個小範例說明。將 <user id="1"><name>Alice</name></user> 貼入輸入欄,屬性前綴設為 @,模式保留在 XML 轉 JSON,然後按「轉換」。輸出為 {"user":{"@id":"1","name":"Alice"}}。將模式切換為 JSON 轉 XML,將該 JSON 貼回,縮排設為 2 個空格,再按「轉換」。你會得到 <user id="1">\n <name>Alice</name>\n</user>,與原始 XML 在結構上完全相同。來回轉換中唯一無法保證的是屬性順序,因為 JSON 物件鍵在規格上是無序的。

此 XML ↔ JSON 轉換器附帶在相同來源捆綁的 fast-xml-parser@4,處理屬性、CDATA、重複子標籤和命名空間前綴,並在頁面載入後可離線使用。無上傳步驟、無 CDN 代理、無分析信標、無任何形式的遙測。每個位元組的輸入和輸出都留在你的瀏覽器中,這正是當 payload 恰好是 FHIR 病患 bundle、SOAP 認證信封,或任何其他形狀的資料——這些資料沒有人應該在你的團隊之外看到——時你所期望的。