Python XML 和 JSON
XML (可扩展标记语言) 和 JSON (JavaScript 对象表示法) 是两种最流行的数据交换格式。它们被广泛用于 Web API、配置文件和数据存储。Python 提供了强大的内置库来解析和生成这两种格式的数据。
JSON (JavaScript Object Notation)
JSON 是一种轻量级的数据交换格式,它基于 JavaScript 的一个子集。由于其易于阅读、编写和解析的特性,JSON 已经成为当今 Web API 的事实标准。
Python 的 json 模块可以轻松地在 Python 对象和 JSON 字符串之间进行转换。
Python 对象到 JSON 类型的转换:
| Python | JSON |
|---|---|
dict | object |
list, tuple | array |
str | string |
int, float | number |
True / False | true / false |
None | null |
核心函数
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
| 特性 | JSON | XML |
|---|---|---|
| 可读性 | 非常好 | 良好,但更冗长 |
| 语法 | 更简洁,更少冗余 | 严格,需要闭合标签 |
| 解析速度 | 通常更快 | 通常更慢 |
| 数据类型 | 支持数字、字符串、布尔、数组、对象 | 所有数据都视为字符串 |
| 生态系统 | 在现代 Web API 中占主导地位 | 在企业系统、配置文件中仍广泛使用 |
总的来说,对于新的应用程序,特别是与 Web 相关的,JSON 通常是更好的选择。但了解如何处理 XML 仍然是一项有价值的技能。