共计 2158 个字符,预计需要花费 6 分钟才能阅读完成。
在现代编程中,JSON(JavaScript Object Notation)是一种非常常用的数据交换格式。它轻量、可读性强,并且在不同编程语言之间广泛支持。Python 提供了内置的 json 模块来处理 JSON 数据,包括字符串与字典之间的转换,以及文件的读写操作。
- JSON 的基本概念
JSON 的数据格式与 Python 的字典和列表非常相似:
- 对象(object)对应 Python 中的字典
dict。 - 数组(array)对应 Python 中的列表
list。 - 字符串、数字、布尔值和
null与 Python 中的str、int/float、True/False、None一一对应。
示例 JSON 数据:
{
"name": "Alice",
"age": 25,
"is_student": false,
"hobbies": ["reading", "coding", "traveling"]
}
- JSON 字符串与 Python 对象转换
使用json.loads()可以将 JSON 字符串转为 Python 对象,使用json.dumps()可以将 Python 对象转为 JSON 字符串。
import json
# JSON 字符串
json_str = '{"name": "Alice", "age": 25, "is_student": false}'
# 转换为 Python 对象
data = json.loads(json_str)
print(data) # {'name': 'Alice', 'age': 25, 'is_student': False}
print(type(data)) # <class 'dict'>
# 将 Python 对象转为 JSON 字符串
new_json = json.dumps(data)
print(new_json) # {"name": "Alice", "age": 25, "is_student": false}
- JSON 文件的读写
通常我们需要从 JSON 文件中读取数据,或者将数据保存到 JSON 文件中。
import json
# 写入 JSON 文件
data = {
"name": "Bob",
"age": 30,
"languages": ["Python", "JavaScript", "Go"]
}
with open("data.json", "w", encoding="utf-8") as f:
json.dump(data, f, ensure_ascii=False, indent=4)
# 读取 JSON 文件
with open("data.json", "r", encoding="utf-8") as f:
loaded_data = json.load(f)
print(loaded_data)
这里的 ensure_ascii=False 用于保证写入时支持中文,indent=4 用于让 JSON 文件更加美观。
- 处理复杂数据
在实际应用中,JSON 常常嵌套多个层级,Python 依旧可以很好地处理:
import json
json_str = '''
{
"company": "Tech Co.",
"employees": [{"name": "Alice", "role": "Developer"},
{"name": "Bob", "role": "Designer"}
],
"active": true
}
'''
data = json.loads(json_str)
print(data["company"]) # Tech Co.
print(data["employees"][0]["name"]) # Alice
- 数据交换场景中的 JSON
JSON 在网络编程中非常重要,常用于 API 数据交换。例如,调用一个天气 API,返回的结果往往是 JSON 格式:
import json
api_response = '{"city": "Beijing", "temp": 26, "condition": "Sunny"}'
weather = json.loads(api_response)
print(f" 城市: {weather['city']},温度: {weather['temp']}°C,天气: {weather['condition']}")
- JSON 的序列化和反序列化注意事项
- Python 的字典键必须是字符串,才能正确转换为 JSON。
- Python 的
tuple在转换为 JSON 时会变成list。 - Python 的
set无法直接转换,需要先转换为list。
示例:
import json
data = {"numbers": (1, 2, 3), # 元组会变为列表
"unique": list({1, 2, 3}) # 集合需先转换为列表
}
json_str = json.dumps(data)
print(json_str) # {"numbers": [1, 2, 3], "unique": [1, 2, 3]}
总结:
在这一节中,我们学习了如何使用 Python 的 json 模块进行数据处理,包括字符串与对象之间的转换、文件的读写,以及嵌套 JSON 的访问。掌握 JSON 数据处理是与网络接口、数据存储打交道的重要技能,为后续的网络编程与数据分析打下了坚实的基础。
练习与思考:
- 将一个包含学生信息的字典列表保存为 JSON 文件,并读取验证。
- 编写程序,读取 JSON 文件中的城市天气数据,并输出天气情况。
- 思考 JSON 与 Python 对象的差异,尝试将
set、tuple转换为 JSON,并观察结果。
正文完