Oh MyUtils

JSON-XML转换器 - JSON/XML双向转换 在线工具

双向转换JSON和XML格式,支持可配置的属性、命名空间和格式化。100%客户端处理,您的数据永远不会离开浏览器。

方向
缩进
XML声明
根元素
空标签自闭合
键排序
输入 (JSON)
输出 (XML)
 

常见问题

什么是JSON-XML转换器?

JSON-XML转换器是一种在JSON(JavaScript Object Notation)和XML(eXtensible Markup Language)格式之间转换数据的工具。JSON使用花括号、方括号和键值对,而XML使用带属性的层次化标签。两种格式都表示结构化数据,但XML支持属性、命名空间和CDATA节等JSON没有直接对应的附加功能。此转换器使用约定(如属性的@_前缀和文本节点的#text)来实现双向转换,同时尽可能多地保留信息。

如何使用这个JSON-XML转换器?

使用单选按钮选择转换方向:JSON → XML或XML → JSON。在输入区域粘贴数据,或点击Sample加载示例数据。输入时会自动实时转换。根据需要配置选项:属性前缀、XML声明、根元素名称、缩进。在输出区域查看转换结果。点击Copy复制结果,或使用Download保存为文件。使用Swap按钮可快速反转方向。

我的数据安全吗?会发送到服务器吗?

您的数据100%安全,永远不会离开您的浏览器。此转换器使用完全在客户端JavaScript中运行的fast-xml-parser库。数据不会传输到任何服务器、存储在任何数据库中或记录在任何地方。所有解析、验证和转换都在您的设备上本地进行。您可以断开互联网来验证——初始页面加载后,工具可完全离线工作。

转换过程中XML属性如何处理?

XML属性使用可配置的前缀映射到JSON属性。默认前缀为@_,因此<book category="fiction">这样的XML属性在JSON中变为{"@_category": "fiction"}。您可以根据需要将前缀更改为@、-或$。从JSON转换回XML时,具有配置前缀的属性会自动转换回XML属性。如果元素同时具有属性和文本内容,文本存储在#text键下。

转换过程中XML命名空间会怎样?

默认情况下,命名空间前缀保留在JSON输出中(例如,<soap:Envelope>变为{"soap:Envelope": ...})。启用"去除命名空间"选项可删除命名空间前缀,简化JSON输出。请注意,去除命名空间是有损操作——如果将JSON转换回XML,命名空间信息将丢失。如果需要无损往返转换,请保留命名空间。

为什么转换为XML时JSON需要根元素?

XML要求恰好有一个根元素。如果JSON有一个顶层键(如{"bookstore": {...}}),该键成为根元素。但如果JSON是数组或有多个顶层键,转换器会将输出包装在根元素中(默认名称:root)。您可以在选项中自定义根元素名称。这是XML的基本要求,而不是工具的限制。

JSON-XML转换有哪些限制?

由于格式的根本差异,JSON和XML之间的转换并不总是完全无损的。主要限制包括:(1) 由于JSON没有注释语法,XML注释会丢失;(2) XML处理指令通常被删除;(3) XML混合内容需要#text约定;(4) JSON键的顺序可能不会被保留;(5) XML CDATA节在JSON中被转换为普通文本。对于大多数实际用例,这些限制很少会造成问题。

代码示例

// JSON to XML conversion using fast-xml-parser
const { XMLParser, XMLBuilder, XMLValidator } = require('fast-xml-parser');

function jsonToXml(jsonString) {
  const parsed = JSON.parse(jsonString);
  const builder = new XMLBuilder({
    attributeNamePrefix: '@_',
    textNodeName: '#text',
    format: true,
    indentBy: '  ',
    ignoreAttributes: false,
  });
  return '<?xml version="1.0" encoding="UTF-8"?>\n' + builder.build(parsed);
}

function xmlToJson(xmlString) {
  const validation = XMLValidator.validate(xmlString);
  if (validation !== true) {
    throw new Error(`Line ${validation.err.line}: ${validation.err.msg}`);
  }
  const parser = new XMLParser({
    ignoreAttributes: false,
    attributeNamePrefix: '@_',
    textNodeName: '#text',
    parseAttributeValue: true,
  });
  return JSON.stringify(parser.parse(xmlString), null, 2);
}

// Example
const json = '{"book":{"@_id":"1","title":"Hello"}}';
console.log(jsonToXml(json));
// <?xml version="1.0" encoding="UTF-8"?>
// <book id="1"><title>Hello</title></book>

相关工具