Skip to content

Python XML 和 JSON

XML (可扩展标记语言) 和 JSON (JavaScript 对象表示法) 是两种最流行的数据交换格式。它们被广泛用于 Web API、配置文件和数据存储。Python 提供了强大的内置库来解析和生成这两种格式的数据。

JSON (JavaScript Object Notation)

JSON 是一种轻量级的数据交换格式,它基于 JavaScript 的一个子集。由于其易于阅读、编写和解析的特性,JSON 已经成为当今 Web API 的事实标准。

Python 的 json 模块可以轻松地在 Python 对象和 JSON 字符串之间进行转换。

Python 对象到 JSON 类型的转换:

PythonJSON
dictobject
list, tuplearray
strstring
int, floatnumber
True / Falsetrue / false
Nonenull

核心函数

  • json.dumps(obj): 将一个 Python 对象(如字典或列表)序列化为 JSON 格式的字符串。
  • json.loads(s): 将一个 JSON 格式的字符串反序列化为 Python 对象。

示例:

python
import json

# 一个 Python 字典
python_data = {
    "name": "John Doe",
    "age": 30,
    "isStudent": False,
    "courses": [
        {"title": "History", "credits": 3},
        {"title": "Math", "credits": 4}
    ]
}

# 1. 将 Python 字典转换为 JSON 字符串
# indent=4 参数会让输出的 JSON 格式化,更易读
json_string = json.dumps(python_data, indent=4)
print("--- JSON String ---")
print(json_string)

# 2. 将 JSON 字符串转换回 Python 字典
retrieved_data = json.loads(json_string)
print("\n--- Retrieved Python Dict ---")
print(retrieved_data)
print(f"Name: {retrieved_data['name']}")

XML (eXtensible Markup Language)

XML 是一种标记语言,其设计宗旨是传输和存储数据。与 HTML 类似,它也使用标签,但 XML 的标签没有被预定义,你需要自行定义标签。

Python 的标准库提供了 xml.etree.ElementTree 模块来处理 XML 数据。

解析 XML

假设我们有以下 data.xml 文件:

xml
<data>
    <country name="Liechtenstein">
        <rank>1</rank>
        <year>2008</year>
        <gdppc>141100</gdppc>
    </country>
    <country name="Singapore">
        <rank>4</rank>
        <year>2011</year>
        <gdppc>59900</gdppc>
    </country>
</data>

示例代码:

python
import xml.etree.ElementTree as ET

# 解析 XML 文件
tree = ET.parse('data.xml')
# 获取根元素
root = tree.getroot()

# 遍历 XML 树
print("--- XML Data ---")
for country in root.findall('country'):
    rank = country.find('rank').text
    name = country.get('name') # 获取属性
    print(f"Name: {name}, Rank: {rank}")

创建 XML

你也可以使用 ElementTree 来构建 XML 树并将其写入文件。

python
import xml.etree.ElementTree as ET

# 创建根元素
root = ET.Element("users")

# 创建子元素
user1 = ET.SubElement(root, "user", id="1")
name1 = ET.SubElement(user1, "name")
name1.text = "Alice"
email1 = ET.SubElement(user1, "email")
email1.text = "alice@example.com"

# ... 创建更多用户 ...

# 创建一个 ElementTree 对象并写入文件
tree = ET.ElementTree(root)
# pretty-printing is not straightforward with ElementTree
# but this will write the file
tree.write("users.xml", encoding='utf-8', xml_declaration=True)

JSON vs. XML

特性JSONXML
可读性非常好良好,但更冗长
语法更简洁,更少冗余严格,需要闭合标签
解析速度通常更快通常更慢
数据类型支持数字、字符串、布尔、数组、对象所有数据都视为字符串
生态系统在现代 Web API 中占主导地位在企业系统、配置文件中仍广泛使用

总的来说,对于新的应用程序,特别是与 Web 相关的,JSON 通常是更好的选择。但了解如何处理 XML 仍然是一项有价值的技能。

本站内容仅供学习和研究使用。