没有一种正确的方式将 JSON 转换为 XML。这两种格式以不同的方式建模 数据:XML 具有属性、混合内容和非原生数组类型,这些 JSON 都没有 等价物。本工具选择一种映射并在页面上声明它,而不是假装存在自然的 映射。
使用 JSON 到 XML 转换器
选择方向,写入 XML 时为根元素命名,因为 JSON 没有什么能像 XML 根 元素那样命名文档。转换
{"items":[{"name":"A & B <co>"},{"name":"C"}],"note":null}
将根设置为 catalog 产生:
<catalog>
<items>
<name>A & B <co></name>
</items>
<items>
<name>C</name>
</items>
<note/>
</catalog>
对象成员变成子元素,数组变成重复的兄弟元素,共享数组的键作为其
名称,XML 文本中非法的字符(如 & 和 <)会被转义。
属性、文本和空值
以 @ 为前缀的键在写入时变成 XML 属性,#text 键变成位于子元素
旁边的文本。@ 和 # 都不是 XML 元素名称的合法起始字符,因此
普通 JSON 键永远不会意外地与任何约定冲突。
null、空对象、空数组和空字符串都变成空元素,因为 XML 只有一种
表示空的形式,无法区分它们。因此读回 <note/> 对所有四种情况
都返回 null,页面明确说明了这一点而不是让你自己发现。
为什么读取器将每个值作为字符串返回
XML 完全不记录类型信息。XML 文档中的数字就格式而言只是数字,猜测 它应该变成 JSON 数字正是那种将邮政编码变成缺少前导零的整数的 猜测。通过拒绝猜测,回读保持无损。
重复元素名称回读意味着什么
同一父元素下重复的元素名称在回读时变成 JSON 数组,而一个不是合法 XML 元素名称的成员名称会停止转换并命名有问题的键,而不是静默地 将其篡改为看起来像有效标签的东西。