JSON 和 XML 是开发中常用的文件格式。它们在数据传输和存储中起到重要作用,因此也是 AI产品经理经常会接触到的数据交换格式。
JSON(JavaScript Object Notation)是一种轻量级的数据交换格式,以简单易读的键值对结构为特点,非常适合表示对象或数组的数据结构。相比 XML,JSON 更加简洁,尤其在接口(API)交互中应用广泛,例如返回用户信息或产品列表。JSON 的语法直接来源于 JavaScript,但被广泛支持于几乎所有的编程语言。
下面是一个 JSON 文件的示例:
{
"products": [
{"id": 101, "name": "Laptop", "price": 1200},
{"id": 102, "name": "Phone", "price": 800}
]
} XML(Extensible Markup Language)是一种基于标签的文件格式,用于描述复杂的层次化数据。XML 强调自描述性,数据以标签包裹,提供丰富的结构化信息,因此常用于配置文件、数据交换协议(如 SOAP)以及需要强大灵活性的场景。与 JSON 相比,XML 更冗长,但对于需要表达多层次和复杂关系的数据更有优势。XML 的严格格式检查(如 DTD 或 XSD)也让其在数据完整性和约束性方面有更高的保障。
下面则是一个 XML 文件的示例:
<products>
<product>
<id>101</id>
<name>Laptop</name>
<price>1200</price>
</product>
<product>
<id>102</id>
<name>Phone</name>
<price>800</price>
</product>
</products>
Python 自带了专门用于解析和生成 JSON 数据的内置库:json 。通过 json 库,可以将 Python 的数据类型(如字典和列表)转换为 JSON 格式,或将 JSON 数据解析回 Python 对象。常用方法包括 json.dump() 和 json.dumps()(将数据转为 JSON),以及 json.load() 和 json.loads()(将 JSON 数据转为 Python 对象)。它被广泛应用于接口(API)数据交互、配置文件管理和数据存储任务中。
常见方法:
json.load():从文件中读取 JSON 数据。json.loads():从字符串中读取 JSON 数据。json.dump():将 JSON 数据写入文件。json.dumps():将 JSON 数据转换为字符串。
示例 1:解析 JSON 文件
import json
with open("products.json", "r") as file:
data = json.load(file) # 读取 JSON 文件
for product in data["products"]:
print(f"产品ID:{product['id']},名称:{product['name']},价格:{product['price']}") 示例 2:生成 JSON 文件
import json
products = {
"products": [
{"id": 101, "name": "Laptop", "price": 1200},
{"id": 102, "name": "Phone", "price": 800}
]
}
with open("products.json", "w") as file:
json.dump(products, file, indent=4) # 写入 JSON 文件,缩进 4 格 同样,Python 也有专门的内置库:xml.etree.ElementTree,用于解析和生成 XML 数据。它提供了轻量级的方法来处理 XML 文件或字符串,支持操作 XML 的树状结构。常用功能包括解析 XML 文件(ElementTree.parse())、查找节点(find() 和 findall())、修改或新增节点(Element 和 SubElement)以及将 XML 数据保存到文件(ElementTree.write())。该库适合处理层次化的数据结构,广泛用于配置文件、数据交换和多层次数据存储等场景。
常见方法:
ElementTree.parse():解析 XML 文件。ElementTree.Element():创建 XML 节点。ElementTree.SubElement():创建子节点。ElementTree.write():保存 XML 数据。
示例 1:解析 XML 文件
import xml.etree.ElementTree as ET
tree = ET.parse("products.xml") # 解析 XML 文件
root = tree.getroot()
for product in root.findall("product"):
product_id = product.find("id").text
name = product.find("name").text
price = product.find("price").text
print(f"产品ID:{product_id},名称:{name},价格:{price}") 示例 2:生成 XML 文件
import xml.etree.ElementTree as ET
root = ET.Element("products")
product1 = ET.SubElement(root, "product")
ET.SubElement(product1, "id").text = "101"
ET.SubElement(product1, "name").text = "Laptop"
ET.SubElement(product1, "price").text = "1200"
tree = ET.ElementTree(root)
tree.write("products.xml", encoding="utf-8", xml_declaration=True) 产品经理在工作中经常会接触到JSON和XML文件,现在我们来看几个案例。
案例 1:解析接口返回的产品数据,生成报告
任务描述:从 API 返回的 JSON 数据中提取产品信息,生成 Excel 报告。具体步骤如下:
- 从 API 返回的 JSON 数据中提取产品信息,包括
id、name、category、price和stock。 - 将提取的信息写入 Excel 文件,生成一份名为
product_report.xlsx的产品报告。 - 报告格式包括表头行,并为每个字段添加一列。
以下是一个模拟通过 API 返回的 JSON 数据,描述了多个产品的基本信息:
{
"status": "success",
"data": [
{"id": 101, "name": "Laptop", "category": "Electronics", "price": 1200, "stock": 15},
{"id": 102, "name": "Phone", "category": "Electronics", "price": 800, "stock": 25},
{"id": 103, "name": "Desk Chair", "category": "Furniture", "price": 150, "stock": 10}
],
"message": "Data retrieved successfully"
} 程序代码:
import json
from openpyxl import Workbook
# 模拟 API 返回的 JSON 数据
api_response = '''
{
"status": "success",
"data": [
{"id": 101, "name": "Laptop", "category": "Electronics", "price": 1200, "stock": 15},
{"id": 102, "name": "Phone", "category": "Electronics", "price": 800, "stock": 25},
{"id": 103, "name": "Desk Chair", "category": "Furniture", "price": 150, "stock": 10}
],
"message": "Data retrieved successfully"
}
'''
# 解析 JSON 数据
data = json.loads(api_response)
products = data["data"]
# 创建 Excel 文件
wb = Workbook()
ws = wb.active
ws.title = "产品报告"
# 添加表头
headers = ["产品ID", "产品名称", "类别", "价格", "库存"]
ws.append(headers)
# 添加产品数据
for product in products:
ws.append([product["id"], product["name"], product["category"], product["price"], product["stock"]])
# 保存报告
wb.save("product_report.xlsx")
print("产品报告已生成:product_report.xlsx") 这个程序具体完成的步骤如下:
1)解析 JSON 数据
- 使用
json.loads()将 JSON 字符串解析为 Python 对象(如字典或列表)。 - 提取
data字段,它包含产品信息的列表。
2)创建 Excel 文件
- 使用
openpyxl创建一个新的 Excel 文件,并设置默认工作表的标题为“产品报告”。 - 在表头行写入产品字段名,包括
产品ID、产品名称、类别、价格和库存。
3)写入数据
- 遍历产品数据列表,将每个产品的信息作为一行写入 Excel 文件。
4)保存文件
- 使用
wb.save("product_report.xlsx")保存文件。
注意:这是一个示例程序,因此我们使用了本地数据。如果你是从一个真实的 api 获取数据,例如: https://www.a.com/api/api.php,我们需要通过 HTTP 请求来获取数据。可以使用 Python 的 requests 库来实现从 API 获取数据的功能。
以下是修改后的代码:
import requests
import json
from openpyxl import Workbook
# 通过 HTTP 请求从 API 获取数据
url = "https://www.a.com/api/api.php"
response = requests.get(url)
# 检查请求是否成功
if response.status_code == 200:
# 解析 JSON 数据
data = response.json() # 自动将返回的 JSON 数据转为 Python 对象
products = data["data"] # 提取产品列表
else:
print(f"API 请求失败,状态码:{response.status_code}")
exit()
# 创建 Excel 文件
wb = Workbook()
ws = wb.active
ws.title = "产品报告"
# 添加表头
headers = ["产品ID", "产品名称", "类别", "价格", "库存"]
ws.append(headers)
# 添加产品数据
for product in products:
ws.append([product["id"], product["name"], product["category"], product["price"], product["stock"]])
# 保存报告
wb.save("product_report.xlsx")
print("产品报告已生成:product_report.xlsx") 参考提示词:
请生成一个 Python 程序,完成以下任务:
- 使用
requests库向指定的 API (https://www.a.com/api/api.php) 发起 HTTP GET 请求,获取返回的 JSON 数据。 - 检查请求是否成功(HTTP 状态码是否为 200),如果失败,打印错误信息并退出程序。
- 解析返回的 JSON 数据,提取
data字段中包含的产品列表。假设每个产品包含以下信息:id:产品 IDname:产品名称category:产品类别price:产品价格stock:库存数量
- 使用
openpyxl库创建一个新的 Excel 文件:- 设置工作表名称为 “产品报告”。
- 在第一行添加表头,字段包括:
产品ID、产品名称、类别、价格、库存。 - 将产品列表中的每个产品信息写入表格。
- 将生成的 Excel 文件保存为
product_report.xlsx。 - 程序完成后,打印消息
产品报告已生成:product_report.xlsx。
要求代码清晰易读,适合初学者理解和使用,注意处理请求失败或返回数据为空的情况。
案例 2:读取并更新配置文件,用于自动化环境部署
任务描述:在这个案例中我们将通过一个模拟的 XML 配置文件,学习如何使用 Python 的 xml.etree.ElementTree 库解析和修改 XML 文件。我们要从配置文件中读取服务器参数,并更新其中的 IP 地址。具体步骤如下:
- 从
server_config.xml文件中读取每个服务器的配置信息,并打印到屏幕。 - 将
ProductionServer的 IP 地址更新为新的值,例如10.0.0.1。 - 保存更新后的 XML 文件,文件名为
server_config_updated.xml。
以下是一个典型的 XML 配置文件,用于存储服务器相关的配置信息,包括 name(服务器名称)、ip(IP 地址)和 port(端口号)。
<configuration>
<server>
<name>ProductionServer</name>
<ip>192.168.1.100</ip>
<port>8080</port>
</server>
<server>
<name>DevelopmentServer</name>
<ip>192.168.1.101</ip>
<port>8081</port>
</server>
</configuration> 以下是可以完成任务的程序代码:
import xml.etree.ElementTree as ET
# 读取 XML 配置文件
tree = ET.parse("server_config.xml")
root = tree.getroot()
# 打印当前的服务器配置信息
print("当前服务器配置信息:")
for server in root.findall("server"):
name = server.find("name").text
ip = server.find("ip").text
port = server.find("port").text
print(f"服务器名称:{name}, IP地址:{ip}, 端口:{port}")
# 更新 ProductionServer 的 IP 地址
new_ip = "10.0.0.1"
for server in root.findall("server"):
name = server.find("name").text
if name == "ProductionServer":
server.find("ip").text = new_ip
print(f"\n更新了 {name} 的 IP 地址为:{new_ip}")
# 保存更新后的 XML 配置文件
tree.write("server_config_updated.xml", encoding="utf-8", xml_declaration=True)
print("\n更新后的配置文件已保存为 server_config_updated.xml") 这个程序具体完成的步骤如下:
1)解析 XML 文件
- 使用
ET.parse("文件名")读取 XML 文件,并生成一个树结构。 - 通过
tree.getroot()获取 XML 的根节点。
2)查找并打印服务器信息
- 使用
root.findall("server")查找所有<server>节点。 - 使用
server.find("字段名").text获取子节点的文本内容。 - 遍历每个
<server>节点,打印服务器的名称、IP 地址和端口。
3)更新 IP 地址
- 遍历
<server>节点,查找名称为ProductionServer的节点。 - 更新其
<ip>子节点的内容为新 IP 地址。
4)保存更新后的文件
- 使用
tree.write()保存修改后的 XML 文件。 - 指定
encoding="utf-8"和xml_declaration=True,确保保存的文件格式正确。
当前服务器配置信息:
服务器名称:ProductionServer, IP地址:192.168.1.100, 端口:8080
服务器名称:DevelopmentServer, IP地址:192.168.1.101, 端口:8081
更新了 ProductionServer 的 IP 地址为:10.0.0.1
更新后的配置文件已保存为 server_config_updated.xml 更新后的文件内容(server_config_updated.xml):
<configuration>
<server>
<name>ProductionServer</name>
<ip>10.0.0.1</ip>
<port>8080</port>
</server>
<server>
<name>DevelopmentServer</name>
<ip>192.168.1.101</ip>
<port>8081</port>
</server>
</configuration> 同样你也可以通过提示词让AI生成代码,这是提示词示例:
参考提示词:
请生成一个 Python 程序,使用 xml.etree.ElementTree 库完成以下任务:
任务描述:读取并更新配置文件,自动化环境部署
- 从名为
server_config.xml的 XML 文件中读取每个服务器的配置信息,包括name(服务器名称)、ip(IP 地址)和port(端口号)。 - 打印所有服务器的当前配置信息,格式为:
服务器名称:<name>, IP地址:<ip>, 端口:<port>。 - 将名称为
ProductionServer的服务器的 IP 地址更新为新的值10.0.0.1。 - 保存更新后的 XML 文件,命名为
server_config_updated.xml。 - 程序运行完成后,打印提示信息
更新后的配置文件已保存为 server_config_updated.xml。
要求代码清晰易懂,适合初学者学习 XML 文件的读取和修改操作,并附带必要的注释。
案例 3:合并用户文件以实现个性化推荐
任务描述:在这个案例中我们需要合并两个不同来源的用户文件,它们都是 JSON 格式,但字段内容不同,而且用户编号的字段名存在差异。我们需要对数据进行清洗、合并、移除敏感信息并最终保存为 JSON 文件,从而为推荐系统提供标准化的数据。具体步骤如下:
- 数据清洗:
- 如何移除敏感字段(如
id_card和ip_address)。 - 如何根据需求筛选和保留有效字段。
- 如何移除敏感字段(如
- 数据合并:
- 将两个 JSON 数据源合并为一个。
- 理解如何通过主键(如
user_id和uid)匹配数据。
- JSON 文件操作:
- 读取和写入 JSON 文件的基本操作。
- 使用
json.dump()保存标准化数据。
- 格式转换与优化:
- 将嵌套或复杂的 JSON 数据处理为统一格式。
- 删除冗余信息,提高存储和处理效率。
用户配置文件 1:preferences_1.json
[
{"user_id": 101, "language": "English", "theme_color": "Dark", "registration_date": "2024-01-01", "ip_address": "192.168.1.1"},
{"user_id": 102, "language": "French", "theme_color": "Light", "registration_date": "2024-02-15", "ip_address": "192.168.1.2"}
] 用户配置文件 2:preferences_2.json
[
{"uid": 101, "name": "Alice", "id_card": "123456789012345678", "interests": ["Technology", "Music"]},
{"uid": 102, "name": "Bob", "id_card": "987654321098765432", "interests": ["Gaming", "Cooking"]}
] 最终目标是将上述两个文件合并为一个标准化的 JSON 文件,能被服务器推荐系统导入使用。文件内容包括:user_id、language、theme_color 和 interests。
输出文件名:merged_preferences.json
[
{"user_id": 101, "language": "English", "theme_color": "Dark", "interests": ["Technology", "Music"]},
{"user_id": 102, "language": "French", "theme_color": "Light", "interests": ["Gaming", "Cooking"]}
] 以下是可以完成任务的程序代码:
import json
# 读取两个 JSON 文件
with open("preferences_1.json", "r", encoding="utf-8") as file1:
data1 = json.load(file1)
with open("preferences_2.json", "r", encoding="utf-8") as file2:
data2 = json.load(file2)
# 清洗并合并数据
merged_data = []
# 创建字典形式以便快速查找第二文件的用户数据
data2_dict = {item["uid"]: item for item in data2}
for user in data1:
user_id = user["user_id"]
# 从文件 2 获取对应用户的兴趣爱好
if user_id in data2_dict:
interests = data2_dict[user_id].get("interests", [])
else:
interests = []
# 创建清洗后的用户记录
cleaned_user = {
"user_id": user["user_id"],
"language": user["language"],
"theme_color": user["theme_color"],
"interests": interests
}
merged_data.append(cleaned_user)
# 保存清洗后的数据到新 JSON 文件
with open("merged_preferences.json", "w", encoding="utf-8") as output_file:
json.dump(merged_data, output_file, indent=4, ensure_ascii=False)
print("数据已成功合并并保存为 merged_preferences.json")
这个程序具体完成的步骤如下:
1)读取数据
- 使用
json.load()读取两个文件,分别加载为data1和data2。
2)清洗数据
- 在
data1中删除不必要的字段(如registration_date和ip_address)。 - 在
data2中删除敏感字段(如name和id_card)。
3)合并数据
- 遍历
data1中的用户,通过user_id和uid匹配data2。 - 如果找到对应的兴趣爱好字段,添加到清洗后的记录中。
4)保存数据
- 使用
json.dump()保存清洗合并后的数据为新文件merged_preferences.json。
同样你也可以通过提示词让AI生成代码,这是提示词示例:
参考提示词:
请为以下任务生成一个 Python 程序,使用 json 模块完成以下操作:
任务描述:合并用户文件以实现个性化推荐
数据源:
- 第一个文件
preferences_1.json包含用户的基本偏好信息(字段包括user_id、language、theme_color等)。 - 第二个文件
preferences_2.json包含用户的兴趣爱好信息(字段包括uid、name、id_card和interests等)。
- 第一个文件
需求:
- 读取两个文件并将其数据加载为 Python 字典。
- 删除敏感字段(如
id_card和name),移除不必要字段(如ip_address和registration_date)。 - 合并两个文件的数据,以
user_id和uid作为匹配字段。 - 生成一个包含以下字段的用户记录:
user_id: 用户的唯一标识符。language: 用户的语言偏好。theme_color: 用户选择的主题颜色。interests: 用户的兴趣爱好(如果没有匹配到兴趣爱好,默认设置为空列表)。
输出要求:
- 将清洗和合并后的数据保存为一个新的 JSON 文件,命名为
merged_preferences.json。 - 输出 JSON 文件应格式化为可读的格式(使用缩进),并确保支持 UTF-8 编码。
- 将清洗和合并后的数据保存为一个新的 JSON 文件,命名为
程序功能:
- 使用字典和列表进行数据处理。
- 结合
json.load和json.dump操作 JSON 文件。 - 提供清晰的代码结构和必要注释,适合初学者学习和使用。
生成的代码应简洁、清晰,并适合初学者理解和使用。最后,程序运行成功后输出提示:数据已成功合并并保存为 merged_preferences.json。
练习1:
你有一个名为:products.xml 的文件。其格式如下:
<products>
<product>
<id>101</id>
<name>Laptop</name>
<category>Electronics</category>
<price>999.99</price>
<stock>20</stock>
</product>
<product>
<id>102</id>
<name>Smartphone</name>
<category>Electronics</category>
<price>499.99</price>
<stock>50</stock>
</product>
<product>
<id>103</id>
<name>Desk Chair</name>
<category>Furniture</category>
<price>89.99</price>
<stock>100</stock>
</product>
</products> products.json 的目标文件。其格式如下: [
{
"id": 101,
"name": "Laptop",
"category": "Electronics",
"price": 999.99,
"stock": 20
},
{
"id": 102,
"name": "Smartphone",
"category": "Electronics",
"price": 499.99,
"stock": 50
},
{
"id": 103,
"name": "Desk Chair",
"category": "Furniture",
"price": 89.99,
"stock": 100
}
] 提示:
你需要先解析 XML 数据:
- 可使用
ET.parse("products.xml")加载 XML 文件。 - 使用
tree.getroot()获取根节点。 - 遍历每个
<product>节点,并提取子节点的文本内容。
- 可使用
然后构建 JSON 数据:
- 使用列表存储多个产品数据,每个产品是一个字典。
- 字典的键与 JSON 文件的字段名一致(如
id、name等)。
最后保存 JSON 文件:
- 使用
json.dump()将数据保存为 JSON 文件。 - 使用
indent=4参数格式化输出。
- 使用
练习2:
下列代码运行时出现错误,请找到代码中的问题,并修复错误。
import json
# 假设我们有一个 JSON 文件 user_data.json,内容如下:
# [{"user_id": 1, "name": "Alice"}, {"user_id": 2, "name": "Bob"}]
# 读取 JSON 文件
with open("user_data.json", "r") as file:
data = json.load(file)
# 打印每个用户的年龄
for user in data:
print(f"用户 {user['name']} 的年龄是 {user['age']}")
程序运行后可能出现下列错误提示:
KeyError: 'age'
提示:你先需要找到错误发生的原因。然后修改代码以避免程序崩溃。
AI 助教
提示:您可在此提出学习中遇到的问题。回答由 AI 生成,可能存在错误,请注意甄别。
