XML实例与JSON相互转换
如果活动文档为XML文档,则此命令将从中生成JSON文档。如果活动文档为JSON文档,则此命令将从中生成XML文档。生成的文档将在新窗口中打开,并可以保存到任何位置。下方将介绍可用的转换选项。有关XMLSpy中的JSON和JSON编辑支持的更多信息,请参见JSON和JSON Schema部分。
示例转换
下方给出了一个源XML文档的示例,在它下面则是使用XML实例与JSON相互转换命令生成的JSON文档。
XML文档
<?xml version="1.0" encoding="UTF-8"?>
<Person first="Jim" last="James">
<Address>
<street>4 New Street</street>
<city>New York</city>
<state>NY</state>
<code>10123</code>
</Address>
<Tel type="home">
123 123-1234
</Tel>
<Tel type="office">
123 987-9876
</Tel>
</Person>
JSON文档
{
"XML": {
"version": 1.0,
"encoding": "UTF-8"
},
"Person": {
"first": "Jim",
"last": "James",
"Address": {
"street": "4 New Street",
"city": "New York",
"state": "NY",
"code": 10123
},
"Tel": [ { "type": "home",
"Text": "\ 123 123-1234\ "}, { "type": "office",
"Text": "\ 123 987-9876\ "} ]
}
}
要将JSON文档转换为XML,请将JSON文档设为活动文档并单击XML实例与JSON相互转换命令。
从XML到JSON的转换选项
当您单击XML实例与JSON相互转换命令将XML实例文档转换为JSON实例文档时,将出现一个“将XML转换为JSON”对话框(参见下方截图)。您可以选择是否要转换为JSON、JSON5或JSON Comments。然后设置所需的转换选项,并单击确定。这时将从XML实例生成JSON实例文档,生成的JSON文档将在新窗口中打开。
前两个选项指定是否应将前缀添加到JSON属性名称中,从而避免与同一级别的元素发生冲突。以下两个代码片段解释了这一点。XML特性somenode已被转换为JSON属性@somenode。这样可以避免与JSON属性somenode(从XML元素somenode创建)的冲突。
XBRL实例
<root somenode="value">
<somenode>content</somenode>
</root>
JSON实例
{
"root": {
"@somenode": "value",
"somenode": "content"
}
}
下面的选项允许您指定是否要转换特定类型的XML节点。如果包括了XML注释,它们将被命名为"#”。文本节点(通常出现在具有混合内容的元素)将被命名为"\$”。如果XML节点具有命名空间前缀,则将使用此命名空间前缀创建相应的JSON名称。如果具有同名的元素存在于同一级别,它们将被视为相等组件。同理,像同一级别上的注释、处理指令和text()这样的节点也是相等组件。如果相等组件存在于同一级别,您可以选择是否创建数组。您可以选择从所有这些相等组件中创建数组,或仅使用相邻的相等组件创建数组,或根本不创建数组。
使用XML Schema类型信息选项允许您根据源节点在XML Schema中的类型设置转换。例如,如果节点在Schema中被定义为xs:string类型,则目标JSON对象的属性将是JSON类型string并用引号括起来。例如,如果一个数字在源XML节点中被存储为字符串,并且在转换为JSON时也必须忠实于类型,则这一功能就很有用。
从JSON到XML的转换选项
当您单击XML实例与JSON相互转换命令将JSON实例文档转换为XML实例文档时,将出现一个“将JSON转换为XML”对话框(参见下方截图)。您可以在其中设置所需的转换选项,然后单击确定。这时将从JSON实例生成一个XML实例文档,生成的XML文档将在新窗口中打开。
请注意以下几点:
•JSON对象属性被转换为XML元素。对话框中的前几个选项允许您选择是否创建某些类型的属性。
•对属性名称中的冒号进行编码:如果选中,JSON名称中的冒号将被编码,而不是创建为冒号。如果未选中,冒号将保持不变。
•保留JSON值类型信息:如果选中,属性的JSON类型信息将被创建为相应元素的特性-值对。
•为每个JSON数组创建容器元素:XML文档中的容器元素将被赋予JSON数组对象的名称。JSON数组中的项将在此容器中被创建为XML元素。每个都将被赋予您在数组项的元素名称文本框中指定的名称。