實用工具

XML 與 JSON 轉換工具

將 XML——RSS 摘要、Sitemap、SOAP 回應、Maven POM——轉成 JSON 再轉回來,屬性保留在你選擇的前綴之下。

瀏覽器本機執行資料格式3138
免費

輸入

0 B

結果

結果會顯示在這裡。

RSS 與 Atom 摘要、Sitemap、SOAP 服務和 Maven 建置至今仍使用 XML,而處理它們的程式碼大多寧可拿到 JSON。這裡使用 fast-xml-parser 進行雙向轉換,它是一個零相依的解析器,在 Node 生態系中被廣泛使用。文件會先經過驗證,所以少了結束標籤時會回報列號與欄號,而不是產生半份結果。屬性會放在一個前綴之下,預設為 @_,因此永遠不會與同名的子元素衝突;文字會保留為字串,除非你要求將數字與布林值解析出來。

它是怎麼運作的

  • 重複的同層元素,例如 RSS 頻道中的多個 <item>,會變成 JSON 陣列;只有一個時則維持為物件。
  • 同時帶有屬性與文字的元素,文字會放在 #text 之下,與加上前綴的屬性並列。
  • 型別轉換預設關閉,所以 <version>2.10</version> 會維持為 "2.10",而不會變成數字 2.1。
  • 轉成 XML 時,JSON 必須恰好有一個頂層鍵,它會成為根元素。

你的資料去了哪裡

哪也沒去。本工具完全在你的瀏覽器裡執行:你貼上的文字由頁面處理,不會傳輸到任何伺服器,也不會寫進任何紀錄。

本工具免費且免登入,執行結果只存在於你目前的頁面裡,不會被儲存到任何地方。

它要花多少

本工具完全免費,不需要登入,也不消耗點數。

常見問題

為什麼一個 <item> 是物件,兩個卻是陣列?
XML 本身並不說明一個元素能否重複,只有 schema 才會規定。只有一個 <item> 時,轉換器沒有理由建立陣列。如果你的程式碼每次都預期拿到陣列,請在轉換後自行正規化,例如使用 [].concat(channel.item)。
@_ 前綴是什麼意思?
它標記這個鍵來自屬性而不是子元素,所以 <guid isPermaLink="true"> 會變成 "@_isPermaLink": "true"。可以選擇 @ 或 $,配合你的程式碼既有的慣例。JSON 轉 XML 時,也是靠同一個前綴判斷哪些鍵要寫回成屬性。
命名空間、註解和 CDATA 會怎麼處理?
命名空間前綴會作為名稱的一部分保留,所以 atom:link 仍是 atom:link。註解會被捨棄,CDATA 區段則當作一般文字讀取。XML 宣告與處理指令會被略過,因為它們不帶有任何資料。
貼上來源不明的 XML 安全嗎?
安全。fast-xml-parser 從不擷取外部實體或 DTD,所以經典的 XXE 攻擊無從下手;轉換也在這個網頁中執行,不會把文件傳送到任何地方。

背後的開源專案

本工具執行在 NaturalIntelligence/fast-xml-parser 之上,以 MIT 授權發布。如果你需要在自己的程式裡實作同樣的能力,直接用這個函式庫。

NaturalIntelligence/fast-xml-parser

也常被稱作

  • xml 轉 json
  • json 轉 xml
  • xml 線上轉換
  • rss 轉 json
  • xml 解析器
  • javascript xml 轉 json