sublime text 不支持 xml→json 一键转换,必须依赖 python 脚本(如 xmltodict)或在线工具;主流插件无此功能,强行用文本包裹法会导致属性丢失、数组塌陷、语义错乱。

Sublime Text 本身不支持 XML → JSON 一键转换,所谓“一键互转”是误导;必须借助外部工具或脚本,否则生成的 JSON 极大概率结构错乱、丢失属性、无法解析。
为什么不能靠插件直接转?
Sublime 的主流插件(如 Pretty JSON、XML Tools)都不提供 XML → JSON 转换命令。你搜 Pretty JSON: Convert XML to JSON 或类似关键词,命令面板里根本不会出现——这不是你漏装插件,而是功能压根不存在。
原因很实际:xmltodict 这类库需要显式调用,而 Sublime 插件生态里几乎没有维护良好的、能自动调起 Python 环境并传参的 XML→JSON 封装。所谓“神操作”多是把 XML 当纯文本加个 {} 包裹,结果连 @attr 和 #text 都没处理,JSON 解析直接报错。
- XML 属性(如
<item id="123"></item>)在 JSON 中需映射为{"@id": "123"},插件不处理就丢数据 - 同名子节点组成的数组(如多个
<child></child>)必须被识别为 list,否则只保留最后一个 - 文本内容与子节点混存时(如
<name>Tom<age>25</age></name>),需拆出"#text": "Tom"字段,否则语义崩坏
真正可用的方案:用 Python 脚本 + Build System
这是目前 Sublime 内最稳定、可控、可复现的方式。前提是本地已安装 Python 3.7+,且能运行 pip install xmltodict。
步骤如下:
- 新建文件,保存为
xml2json.py,内容为:
import sys
import xmltodict
import json
try:
with open(sys.argv[1], 'r', encoding='utf-8') as f:
xml = f.read()
parsed = xmltodict.parse(xml, process_namespaces=False)
print(json.dumps(parsed, indent=2, ensure_ascii=False))
except Exception as e:
print(f"Error: {e}")
sys.exit(1)
- 在 Sublime 中打开
Tools → Build System → New Build System - 粘贴以下内容并保存为
XML2JSON.sublime-build(路径默认在Packages/User/):
{
"shell_cmd": "python \"${packages}/User/xml2json.py\" \"$file\"",
"file_regex": "Error: (.*)",
"selector": "text.xml"
}
- 打开 XML 文件 → 右下角确认语法为
XML→ 按Ctrl+B(Windows/Linux)或Cmd+B(Mac) - 输出面板会显示转换后的 JSON,复制即可;若报错,错误信息会定位到具体异常点
不想写脚本?在线工具更省事
如果你只是偶尔转换、不涉及敏感数据、文件小于 2MB,直接用在线工具反而更快、更可靠:
-
https://www.freeformatter.com/xml-to-json-converter.html—— 支持命名空间、属性前缀、数组推断,选项清晰 -
https://codebeautify.org/xmltojson—— 可切换输出风格(如是否展开#text、是否保留注释) - 粘贴 XML → 点击 Convert → 复制结果 → 在 Sublime 中新建文件 →
Ctrl+Shift+P输入Pretty JSON: Beautify格式化
注意:别用“Sublime 插件市场搜 XML to JSON”出来的那些老插件,多数最后调用的是过期的 JS 库或返回空结果,2026 年仍活跃维护的仅限命令行/Python 方案。
关键细节容易被忽略
无论用脚本还是在线工具,以下三点不检查,90% 的转换结果都不可用:
- XML 文件必须有且仅有一个根节点,
<a></a><b></b>这种片段会解析失败 - 确保 XML 是 UTF-8 编码(不是 UTF-8 with BOM),否则
xmltodict.parse()会抛 UnicodeDecodeError - 如果原始 XML 含 CDATA 或特殊实体(如
),在线工具通常能自动解码,但自写脚本需额外加xmltodict.parse(..., hughes=True)或预处理
真正“易读”的 JSON 不是缩进好看就行,而是字段语义对齐、数组不塌陷、属性不丢失——这得靠底层解析逻辑,不是编辑器快捷键能解决的。










