JSON 与 XML 互转

根元素名、数组包裹与属性映射规则可选,失败时说明原因。

@ 前缀按属性处理数组每项包一层 item
输入
输出

映射沿用常见的约定(与 Apigee 的 xml.com 格式一致):以 @ 开头的键变成同名属性,#text 变成元素文本,反过来读时按同一个口径还原。JSON 没有「唯一根元素」的约束,XML 有:顶层恰好只有一个键时拿它当根元素名,其余情况(多个键、顶层是数组或标量)统一包进 <root>;数组默认重复父键名输出。

转换必然有损,工具把丢掉的每一样都列出来:XML 没有类型,数字和布尔写成文本,读回时只在字面量完全等价时才转型;null 写成空元素,读回是空串。声明、DOCTYPE、处理指令、注释在 JSON 里无处安放,会被丢弃并计数;命名空间前缀原样留着,不做拆分也不补 xmlns。

JSON 与 XML 互转怎么用

  • 方向:JSON → XML:直接粘响应体,根元素名按上面规则确定,提示条会写明用的哪个名字。XML → JSON:粘贴整段 XML(可带声明与注释),非格式良好的文档会先报错并给出行列。在「根元素名」里填一个名字就改用你的名字做外层元素(只在 JSON → XML 方向生效,非法字符换成下划线,原本那唯一的顶层键会降成子元素)。
  • 两个开关:「@ 前缀按属性处理」控制 @ 与 #text 是否按属性/文本映射,关掉后这些前缀被去掉、往返不再等价;「数组每项包一层 item」控制数组是重复父键名还是统一包在 <item> 下,外加的这一层在反向解析时会保留成 {port:{item:[…]}},想还原成数组请把开关关掉。这一族里另一种常见写法是 badgerFish(属性用 @、文本用 $),如果你的历史数据用的是 $,关掉「@ 前缀按属性处理」按普通子元素处理更安全。
  • 缩进:缩进宽度 1 到 8,只影响输出的排版,不改变映射结果;两侧的输出都可以直接复制去 diff。
  • 顺序与混合内容:属性顺序、元素顺序按文档顺序保留,混合内容的文本按出现顺序拼进 #text,首尾空白裁掉。

常见问题

为什么根元素叫 root?

顶层有两个及以上的键,或者顶层是数组、标量时,无法从数据里挑出一个唯一的名字,默认只能包进 <root>。想要有业务含义的根元素名,在工具条的「根元素名」里填一个(非法字符换成下划线),或者把数据收成 { "你的名字": { … } } 一层。

数字和布尔为什么变成字符串了?

XML 里所有值都是文本,读回来时只有「字面量完全等价」才敢转型:80 → 数字,007、1.50、1e5、+3 保持字符串,否则会把订单号、版本号这类看似数字的字符串改坏。null 写成空元素,读回是空串而不是 null。

命名空间和属性顺序怎么处理?

前缀原样留在键名与标签名里(如 exp:person),不做拆分也不补 xmlns,因此带命名空间的文档往返后仍保留可读性但不会自动生成声明。属性顺序按 XML 文档顺序写出,读回后 JSON 键顺序是「属性在前、子元素居中、#text 最后」,不等同于原始顺序。

对应功能编号 #108无需安装,手机端同样可用按 Ctrl + K 换工具