本文目录导读:

是的,脚本可以自动将XML转换为JSON,以下是几种常见的方法:
Python脚本(最常用)
import xmltodict
import json
def xml_to_json(xml_string):
# 将XML转换为字典
dict_data = xmltodict.parse(xml_string)
# 将字典转换为JSON
json_data = json.dumps(dict_data, indent=2)
return json_data
# 使用示例
xml_data = """
<root>
<person>
<name>张三</name>
<age>25</age>
<city>北京</city>
</person>
</root>
"""
result = xml_to_json(xml_data)
print(result)
JavaScript/Node.js脚本
// 使用 xml2js 库
const xml2js = require('xml2js');
const parser = new xml2js.Parser();
const xml = `
<root>
<person>
<name>张三</name>
<age>25</age>
<city>北京</city>
</person>
</root>
`;
parser.parseString(xml, (err, result) => {
if (err) {
console.error('解析错误:', err);
return;
}
const json = JSON.stringify(result, null, 2);
console.log(json);
});
命令行工具
使用 xmlstarlet 和 jq:
# 安装工具
sudo apt-get install xmlstarlet jq # Ubuntu/Debian
# 转换XML为JSON
xmlstarlet sel -t -o '{' -m '//*' -o '"' -v 'name()' -o '":"' -v 'text()' -o '","' -b -o '}' file.xml | jq .
Python内置库(无需额外安装)
import xml.etree.ElementTree as ET
import json
def xml_to_json_simple(xml_string):
root = ET.fromstring(xml_string)
result = {}
def parse_element(element):
data = {}
# 处理属性
if element.attrib:
data['@attributes'] = element.attrib
# 处理子元素
children = list(element)
if children:
for child in children:
child_data = parse_element(child)
if child.tag in data:
if not isinstance(data[child.tag], list):
data[child.tag] = [data[child.tag]]
data[child.tag].append(child_data)
else:
data[child.tag] = child_data
else:
# 处理文本内容
text = element.text
if text and text.strip():
data['#text'] = text.strip()
return data
result[root.tag] = parse_element(root)
return json.dumps(result, indent=2)
# 使用
print(xml_to_json_simple(xml_data))
在线工具
如果不想写代码,可以使用在线转换工具:
注意事项
- 结构差异:XML有属性(attributes),而JSON没有直接对应,通常需要特殊处理
- 命名空间:XML的命名空间需要额外处理
- 数组处理:同一个标签名的多个元素需要转换为JSON数组
- 编码问题:注意处理中文字符等特殊编码
最推荐使用Python的 xmltodict 库,它处理得最智能,能自动处理大部分XML特有结构。