實用工具
輸入
結果
結果會顯示在這裡。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