XML 與 JSON 互轉指南:設定檔與 API 資料格式轉換
JSON(更新於 2026年6月19日)
XML 與 JSON 的核心差異
| 特性 | XML | JSON |
|---|---|---|
| 資料格式 | 標籤標記 | 鍵值對 |
| 屬性 | 有(<node attr="val">) |
無(屬性轉為欄位) |
| 命名空間 | 有(xmlns) |
無 |
| 註解 | 有(<!-- -->) |
無 |
| 陣列表示 | 隱式(同名元素重複) | 顯式([]) |
| 文字節點 | 混合內容(標籤+文字) | 純字串值 |
XML 更適合文件型資料(SVG、HTML、設定),JSON 更適合結構化資料(API 回應)。
XML 屬性如何對映到 JSON
XML 元素可以同時有屬性和文字內容,這是轉換的難點:
簡單元素
<person name="張三" age="30"/>
{
"person": {
"@name": "張三",
"@age": "30"
}
}
約定用
@前綴表示 XML 屬性,這是最常見的轉換規則。
混合內容(屬性 + 文字)
<price currency="CNY">68.00</price>
{
"price": {
"@currency": "CNY",
"#text": "68.00"
}
}
用
#text表示元素的文字內容,與屬性區分。
陣列偵測:最容易踩的坑
XML 中陣列是隱式的——同名元素重複出現就是陣列:
<books>
<book>三體</book>
<book>活著</book>
</books>
{
"books": {
"book": ["三體", "活著"]
}
}
問題:只有一個元素時,XML 看不出是陣列:
<books>
<book>三體</book>
</books>
可能轉為:
{
"books": {
"book": "三體"
}
}
解決:使用 XML↔JSON 工具 時,勾選「強制陣列」選項,指定哪些元素始終作為陣列處理。
命名空間處理
XML 命名空間在 JSON 中沒有直接對應:
<soap:Envelope xmlns:soap="http://www.w3.org/2003/05/soap-envelope">
<soap:Body>
<m:GetPrice xmlns:m="http://example.com">
<m:Item>123</m:Item>
</m:GetPrice>
</soap:Body>
</soap:Envelope>
常見處理策略:
| 策略 | 說明 | 適用場景 |
|---|---|---|
| 保留前綴 | soap:Body → "soap:Body" |
SOAP/WSDL 處理 |
| 去除前綴 | soap:Body → "Body" |
簡單場景,無衝突 |
| 使用命名空間鍵 | {soap}Body |
需要區分同名的不同命名空間 |
使用 XML 格式化工具 先整理 XML,再進行轉換。
使用 XML↔JSON 工具
第一步:開啟工具
造訪 XML↔JSON 工具,選擇轉換方向。
第二步:輸入來源資料
- XML → JSON:貼上 XML 字串
- JSON → XML:貼上 JSON 字串
第三步:設定轉換選項
| 選項 | 說明 |
|---|---|
| 屬性前綴 | 屬性對映為 @attr 還是 $attr |
| 文字節點鍵 | 文字內容對映為 #text 還是 _text |
| 強制陣列 | 指定始終作為陣列的元素名 |
| 命名空間 | 保留/去除/轉換 |
第四步:執行轉換
點擊「轉換」,檢視結果並複製。
實戰場景
設定檔遷移
許多舊專案使用 XML 設定(Spring、Maven),新專案傾向 YAML/JSON:
pom.xml → package.json(依賴資訊)
spring-config.xml → application.json(Bean 設定)
SOAP API 轉 REST
SOAP 回應是 XML,需要轉為 JSON 供前端使用:
SOAP XML 回應 → JSON → 前端渲染
SVG 元資料提取
SVG 是 XML 格式,提取元資料轉為 JSON 便於程式處理:
<svg width="100" height="100"> → {"svg": {"@width": "100", "@height": "100"}}
JSON 轉 XML 注意事項
JSON 轉 XML 時需要注意:
| 注意點 | 說明 |
|---|---|
| 根元素 | JSON 必須有唯一的根鍵 |
| 鍵名合法性 | XML 標籤名不能以數字開頭,不能含空格 |
| 陣列包裝 | JSON 陣列需要指定包裝元素名 |
| 特殊字元 | <、>、& 需要轉義為實體 |
常見問題
| 問題 | 原因 | 解決 |
|---|---|---|
| 單元素未轉為陣列 | XML 無法區分單元素和陣列 | 勾選「強制陣列」 |
| 屬性遺失 | 轉換規則未設定屬性前綴 | 檢查屬性前綴設定 |
| 命名空間衝突 | 不同命名空間有同名元素 | 保留命名空間前綴 |
| JSON 轉報錯 | 鍵名不合法 | 修改鍵名符合 XML 規範 |
| 混合內容遺失 | 文字節點鍵未正確對映 | 檢查 #text 設定 |
總結
XML 與 JSON 互轉是資料格式遷移和 API 整合中的常見需求。理解屬性對映、陣列偵測、命名空間三大核心問題,是正確完成轉換的關鍵。XML↔JSON 工具 提供靈活的轉換設定,配合 JSON 格式化 和 XML 格式化 建構完整的格式轉換工作流。
#XML#JSON#格式转换#API#配置