python如何读写json数据

  • Post category:Python

下面是详细讲解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数据的攻略。希望对你有所帮助。