XML 转 JSON
把 XML 转成 JSON:可配置属性前缀与文本键、同名标签合并成数组的策略、缩进、属性与文本共存的处理方式,支持 CDATA 与注释,非法 XML 会给出行列位置。
浏览器本地运行所有计算都在你的浏览器里完成,数据不会离开本机。
属性默认写成 @name;同名子元素重复出现时自动合并为数组。
选项
统计
转换后的 JSON
{
"catalog": {
"book": [
{
"@id": "1",
"@lang": "zh",
"title": "工具站",
"price": "39.9",
"tags": {
"tag": [
"工具",
"前端"
]
}
},
{
"@id": "2",
"title": "UniKit <guide>",
"price": "0"
}
]
}
}这个工具能做什么
- 把 SOAP、RSS 或老接口返回的 XML 转成 JSON,直接塞进前端代码或 NoSQL,不用自己写解析逻辑。
- 只看结构不想手写映射:属性自动变成 @name,重复的同名标签自动合成数组,一眼就能看出层级。
- 需要严格对照时关掉「推断类型」,让所有值保持字符串,避免「0012」被当成数字 12 这种精度问题。
- CDATA、注释、处理指令会按选项决定是否保留(#cdata / #comment),方便核对报文里被藏起来的内容。
示例
输入
<catalog><book id="1"><title>UniKit</title><tag>json</tag><tag>xml</tag></book></catalog>
输出
{
"catalog": {
"book": {
"@id": "1",
"title": "UniKit",
"tag": [
"json",
"xml"
]
}
}
}默认选项(属性前缀 @、同名标签自动成数组、缩进 2 空格)的输出。页面默认关掉「推断类型」,所以 @id 是字符串 "1";勾上后会变成数字 1。
常见问题
属性和文本分别放到哪里?
属性默认写成 @属性名(前缀可在选项里改,也可以指定一个分组键把属性收进同一个对象)。元素有属性或子元素时,直接文本放进 #text 键;如果元素只有纯文本,会直接折叠成值本身。
同名标签什么时候变成数组?
默认「自动」:同名标签出现两次以上才合成数组,只出现一次就是单个对象。选「总是数组」后每个标签都是数组(接口固定返回列表时更省事),选「从不数组」则只保留最后一个同名标签,前一个会被丢弃。
数字和布尔值会被自动转换吗?
只有勾选「推断类型」才会:形如 123、-1、39.9 的文本转成数字,true / false 转成布尔。默认关闭,因为像订单号、手机号、版本号这类字段一旦转成数字就会丢前导零或精度,保持字符串更安全。
CDATA 和注释怎么处理?
默认 CDATA 会并入文本(和普通文本一样参与合并),勾选「CDATA 单独输出为 #cdata」后会单独放在 #cdata 键下。注释默认丢弃,勾选「保留注释」后会放在 #comment 键下,多条注释则是数组。
XML 有错怎么办?内容会上传吗?
解析失败会给出错误码、行列位置和出错行的片段,例如 mismatched-close-tag、unclosed-tag,方便直接定位。所有解析都在浏览器本地完成,页面不发网络请求,XML 内容不会被上传或记录。
关键词:xmljsonxml to jsonXML 转 JSON属性CDATA转换serialize