脚本能自动转换XML为JSON吗?

wen 实用脚本 3

本文目录导读:

脚本能自动转换XML为JSON吗?

  1. Python脚本(最常用)
  2. JavaScript/Node.js脚本
  3. 命令行工具
  4. Python内置库(无需额外安装)
  5. 在线工具
  6. 注意事项

是的,脚本可以自动将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);
});

命令行工具

使用 xmlstarletjq

# 安装工具
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))

在线工具

如果不想写代码,可以使用在线转换工具:

注意事项

  1. 结构差异:XML有属性(attributes),而JSON没有直接对应,通常需要特殊处理
  2. 命名空间:XML的命名空间需要额外处理
  3. 数组处理:同一个标签名的多个元素需要转换为JSON数组
  4. 编码问题:注意处理中文字符等特殊编码

最推荐使用Python的 xmltodict 库,它处理得最智能,能自动处理大部分XML特有结构。

抱歉,评论功能暂时关闭!