下面是详细讲解Python如何读写JSON数据的攻略。
概述
JSON(JavaScript Object Notation) 是一种轻量级的数据交换格式,它具有良好的可读性和扩展性,已经成为现代 Web 应用中最常用的数据传输格式之一。Python标准库中的 json
模块提供了 JSON 数据的编码和解码功能。
在Python中读写JSON数据的一般步骤如下:
- 加载JSON字符串或文件;
- 解析JSON数据;
- 操作或处理JSON数据;
- 生成JSON字符串或保存为JSON文件。
下面我们来具体讲解这些步骤。
加载JSON字符串或文件
Python中可以直接使用 json.loads()
函数将JSON字符串转换为Python对象,例如:
import json
json_str = '{"name": "Joe", "age": 25, "sex": "male"}'
data = json.loads(json_str)
print(data)
输出结果为:
{'name': 'Joe', 'age': 25, 'sex': 'male'}
除了从字符串加载JSON数据外,json
模块还可以从文件中加载JSON数据。例如:
import json
with open('data.json') as f:
data = json.load(f)
print(data)
上述代码中的 data.json
文件存放了以下内容:
{
"name": "Lucy",
"age": 30,
"sex": "female"
}
json.load(f)
函数将文件 f
中的JSON数据读取并解析为Python对象,输出结果为:
{'name': 'Lucy', 'age': 30, 'sex': 'female'}
解析JSON数据
在将JSON数据加载到Python对象中之后,我们可以使用Python的标准数据类型(如列表、字典、数值、字符串等)来操作JSON数据。例如可以通过以下方式来获取JSON数据中的某个字段值:
import json
json_str = '{"name": "Joe", "age": 25, "sex": "male"}'
data = json.loads(json_str)
print("name:", data["name"])
print("age:", data["age"])
print("sex:", data["sex"])
输出结果为:
name: Joe
age: 25
sex: male
操作或处理JSON数据
在获取JSON数据中的某个字段值后,可以对其进行一些处理或操作,例如修改、删除、添加等。以修改为例:
import json
json_str = '{"name": "Joe", "age": 25, "sex": "male"}'
data = json.loads(json_str)
data["name"] = "Jane"
json_str = json.dumps(data)
print(json_str)
输出结果为:
{"name": "Jane", "age": 25, "sex": "male"}
上述代码中,我们将 data
对象中的 name
字段值从 Joe
修改为 Jane
,再将其转换成JSON字符串。
生成JSON字符串或保存为JSON文件
在处理JSON数据后,我们可以使用 json.dumps()
函数将Python对象转换为JSON字符串,并在需要时将其保存为JSON文件。例如:
import json
data = {
"name": "Tom",
"age": 20,
"sex": "male"
}
json_str = json.dumps(data)
print(json_str)
with open('data.json', 'w') as f:
json.dump(data, f)
上述代码中,json.dumps()
将 data
对象转换为JSON字符串进行输出,json.dump()
将 data
对象以JSON格式保存到文件 data.json
中。文件内容如下:
{"name": "Tom", "age": 20, "sex": "male"}
示例
最后,我们来看两个具体的示例。第一个示例是从 data.json
文件中读取学生信息,求每个学生的平均分并输出。 data.json
文件内容如下:
{
"students": [
{"name": "Alice", "id": 1001, "courses": [{"name": "math", "score": 90}, {"name": "english", "score": 85}]},
{"name": "Bob", "id": 1002, "courses": [{"name": "math", "score": 78}, {"name": "english", "score": 88}]},
{"name": "Charlie", "id": 1003, "courses": [{"name": "math", "score": 92}, {"name": "english", "score": 90}]}
]
}
以下是代码片段:
import json
with open('data.json') as f:
data = json.load(f)
students = data["students"]
for student in students:
total_score = 0
for course in student["courses"]:
total_score += course["score"]
avg_score = total_score / len(student["courses"])
print("name:", student["name"], ", id:", student["id"], ", avg score:", avg_score)
输出结果为:
name: Alice , id: 1001 , avg score: 87.5
name: Bob , id: 1002 , avg score: 83.0
name: Charlie , id: 1003 , avg score: 91.0
第二个示例是将学生信息以JSON格式保存到文件 result.json
中。以下是代码片段:
import json
data = {
"students": [
{"name": "Alice", "id": 1001, "scores": [90, 85]},
{"name": "Bob", "id": 1002, "scores": [78, 88]},
{"name": "Charlie", "id": 1003, "scores": [92, 90]}
]
}
with open('result.json', 'w') as f:
json.dump(data, f, indent=4)
将 data
对象保存为JSON文件时,通过设置 indent=4
来使文件中的JSON数据以缩进方式更好的阅读。文件内容如下:
{
"students": [
{
"name": "Alice",
"id": 1001,
"scores": [
90,
85
]
},
{
"name": "Bob",
"id": 1002,
"scores": [
78,
88
]
},
{
"name": "Charlie",
"id": 1003,
"scores": [
92,
90
]
}
]
}
到这里,我们就完成了Python读写JSON数据的攻略。希望对你有所帮助。