XML ⇄ JSON
貼上任意一種格式,另一種邊輸入邊出現,雙向都支援。
怎麼用
- 把 XML 或 JSON 粘進輸入框——結果邊輸入邊出,沒有按鈕要按。方向由首字元自動識別(< 代表 XML,[ 或 { 代表 JSON),並顯示在結果上方,方便核對。
- 若方向識別錯了,手動選 XML → JSON 或 JSON → XML。選項會隨方向變化:XML → JSON 顯示“識別數字與布林”,JSON → XML 顯示用於包裹陣列的“根元素名”。
- 複製或下載結果,兩者都與螢幕上看到的完全一致;檔名是 data.json 或 data.xml。“填入示例”會按當前方向填入對應示例。
示例
輸入(XML)
<note id="1"><to>Alice</to><from>Bob</from><body>Hi!</body></note>
輸出(JSON)
{ "note": { "@id": "1", "to": "Alice", "from": "Bob", "body": "Hi!" } }
id 屬性變成“@id”,每個子元素變成一個鍵,<body> 裡的文本變成字串值。把“識別數字與布林”關掉,可讓所有值(包括 id)都保持文本。
規則、限制與已知問題
- 不支援上傳檔案、拖曳或抓取 URL:請直接貼上文本。拖曳區會擠佔結果所需的高度,而真正讀檔案還要處理非 UTF-8 編碼——這部分在 XML 格式化工具裡已支援(GB18030、Big5、Windows-1256),去那裡開啟檔案再複製文本即可。
- 輸入上限 1,000,000 個字元;超過 200,000 會等你停手再出結果並提示。超過硬上限會明確報錯——絕不靜默截斷。
- 對映規則是刻意固定的:元素變成物件;屬性變成“@name”;元素文本變成“#text”;子元素變成鍵;同名子元素變成陣列。只有文本的葉子元素直接變成字串,讓深層文件依然清爽。
- 型別識別(XML → JSON)很保守:只有 true / false / null(僅小寫)和嚴格的 JSON 數字會被轉成真型別。帶前導零的整數(00501)和 16 位及以上的長數字保持字串;關掉開關後其餘都保持文本。屬性永遠是文本,絕不會被重新識別型別,因為 XML 屬性本質就是文本。
- JSON → XML 需要單根,所以頂層物件用其唯一鍵作為根元素。頂層若是 JSON 陣列則沒有單根,會被包進“根元素名”裡,每個元素變成重複的子元素(預設名為“item”)。
- 鍵下的值可以是物件、陣列、字串、數字、true / false 或 null。“@name”鍵變成屬性(null / undefined 會被跳過);“#text”變成元素文本;其餘鍵變成子元素。陣列產生重複元素。
- XML 裡的註解、處理指令(<? … ?>)和 DOCTYPE 會被丟棄並計數(它們無法用 JSON 表示);CDATA 會保留為文本。混合內容——文本緊貼子元素——會被壓平進“#text”,原來的順序不保留;受影響的元素會被計數,便於你察覺。
- JSON 解析嚴格:不允許註解、尾隨逗號、單引號或裸控制字元,巢狀最多 64 層。每行一個物件(JSON Lines)暫不支援——請先包進陣列。
- XML 實體引用(& < >)在文本與屬性中原樣保留(不解碼),因此往返能還原完全相同的位元組。轉義加在 JSON → XML 一側:文本轉義 & < >,屬性值額外轉義 “。
- 不在範圍內:XSLT、XPath、XML Schema 校驗、名稱空間(僅作為標籤名的一部分)、重複鍵的 JSON(最後一個生效,同 JSON.parse)、以及保留註解順序。全程只在本地進行,不上傳、不儲存、不寫入 URL。
相關工具
資料換好格式之後,通常還會用到這些。