跳到主内容
UniKit

XML 转 JSON

把 XML 转成 JSON:可配置属性前缀与文本键、同名标签合并成数组的策略、缩进、属性与文本共存的处理方式,支持 CDATA 与注释,非法 XML 会给出行列位置。

浏览器本地运行所有计算都在你的浏览器里完成,数据不会离开本机。

XML 内容

属性默认写成 @name;同名子元素重复出现时自动合并为数组。

选项

统计

元素数: 10属性数: 3文本节点: 5注释: 1CDATA: 1最大深度: 4根元素: catalog

转换后的 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

同类工具