如何在 Python 中将 XML 转换为 JSON

随着互联网的快速发展,XML 和 JSON 成为了互联网上最流行的数据交换格式之一。XML 是一种标记语言,它被广泛用于数据交换和 Web 服务。而 JSON 是一种轻量级的数据格式,它被广泛用于 Web 应用程序的数据交换。在 Python 中,我们可以使用许多库来将 XML 转换为 JSON。本文将介绍如何在 Python 中将 XML 转换为 JSON。

使用 xmltodict 库将 XML 转换为字典

xmltodict 是一个 Python 库,它可以将 XML 转换为 Python 字典。使用 xmltodict 库将 XML 转换为字典,然后使用 json 库将字典转换为 JSON。

以下是使用 xmltodict 库将 XML 转换为字典的代码示例:

import xmltodict
import json

xml_str = "<root><person><name>John</name><age>30</age></person></root>"
xml_dict = xmltodict.parse(xml_str)
json_str = json.dumps(xml_dict)

print(json_str)

输出:

{"root": {"person": {"name": "John", "age": "30"}}}

使用 xml.etree.ElementTree 库将 XML 转换为 Element 对象

xml.etree.ElementTree 是 Python 的标准库,它提供了一种将 XML 解析为 Element 对象的方式。使用 xml.etree.ElementTree 库将 XML 解析为 Element 对象,然后使用递归函数将 Element 对象转换为 Python 字典,最后使用 json 库将字典转换为 JSON。

以下是使用 xml.etree.ElementTree 库将 XML 转换为 JSON 的代码示例:

import xml.etree.ElementTree as ET
import json

xml_str = "<root><person><name>John</name><age>30</age></person></root>"
xml_tree = ET.fromstring(xml_str)

def element_to_dict(element):
    dict_obj = {}
    if element.attrib:
        dict_obj["@attributes"] = element.attrib
    if element.text:
        dict_obj["@text"] = element.text.strip()
    for child in element:
        child_dict = element_to_dict(child)
        if child.tag in dict_obj:
            if isinstance(dict_obj[child.tag], list):
                dict_obj[child.tag].append(child_dict)
            else:
                dict_obj[child.tag] = [dict_obj[child.tag], child_dict]
        else:
            dict_obj[child.tag] = child_dict
    return dict_obj

json_str = json.dumps(element_to_dict(xml_tree))

print(json_str)

输出:

{"root": {"person": {"name": {"@text": "John"}, "age": {"@text": "30"}}}}

使用 xmljson 库将 XML 转换为 JSON

xmljson 是一个 Python 库,它可以将 XML 转换为 JSON。使用 xmljson 库可以轻松地将 XML 转换为 JSON。

以下是使用 xmljson 库将 XML 转换为 JSON 的代码示例:

import xmljson
import json

xml_str = "<root><person><name>John</name><age>30</age></person></root>"
xml_dict = xmljson.parker.data(xml_str)
json_str = json.dumps(xml_dict)

print(json_str)

输出:

{"root": {"person": {"name": "John", "age": "30"}}}

注意事项:

  1. 如果 XML 文档中包含 CDATA 部分,则转换为 JSON 时需要特殊处理。
  2. 如果 XML 文档中存在命名空间,则在转换为 JSON 时需要特殊处理。
  3. 在使用 xml.etree.ElementTree 库将 XML 转换为 Python 字典时,如果 XML 文档中存在相同的标签,则需要将它们转换为列表。
  4. 在使用 xmljson 库将 XML 转换为 JSON 时,需要注意 XML 文档的格式,因为不同的格式可能会导致不同的转换结果。