DevToolbox
跳到主内容

XML ⇄ JSON

双向互转,属性 @ 前缀与文本节点映射可调

XML 输入
支持元素、属性、CDATA、注释与字符实体
0 字符
JSON 输出
转换结果会显示在这里
方向XML → JSON
根元素名
元素节点数
属性个数
输入字符0
输出字符0

关于XML ⇄ JSON

XML 与 JSON 描述的是同一种树形结构,但表达方式差别很大:XML 有属性、文本节点、注释、CDATA 和命名空间,而 JSON 只有对象、数组与值。因此转换必须约定一套映射规则——本工具采用业界最通用的约定:属性加 @ 前缀(@id),纯文本放进 #text,同名子元素聚合成数组。这些前缀都可以在上方改成你后端使用的写法。

解析器是手写的,不依赖浏览器的 DOMParser,因此不会因为 XML 里出现未定义实体或命名空间而整段失败,而是给出精确到行列的错误位置。反方向转换时会校验 XML 名称合法性并强制单一根元素——顶层有多个键会直接报错,而不是悄悄丢掉多余的内容。所有解析都在本地完成,粘贴内部接口报文不会有泄露风险。

常见问题

属性为什么变成了 @ 开头的键?

JSON 里没有「属性」这个概念,必须用某种命名约定把它和子元素区分开。本工具默认给属性加 @ 前缀、给文本内容用 #text,这也是 fast-xml-parser、xml2js 等库的默认行为。如果你的后端用别的写法(例如 attributes 嵌套),把「属性前缀」改成对应值即可。

为什么转出来的 JSON 里有些值是数组、有些是单个对象?

只有一个同名子元素时会输出对象,多个时会输出数组——这样最贴近数据的实际结构,但会让取值代码需要判断类型。如果不想判断,打开「同名元素始终用数组」开关,所有子元素都会统一成数组。这也是 XML 本身没有数组概念带来的固有歧义。

支持命名空间(xmlns)吗?

命名空间声明会被当成普通属性(@xmlns:ns),带前缀的元素名原样保留(ns:item)。本工具不做命名空间解析与合并,因为大多数接口调试场景只需要看到原始结构。如果确实需要按命名空间取值,请在代码里用带命名空间的解析器处理。