当前位置: 代码网 > it编程>前端脚本>Python > Python内置json实现数据本地持久化详解

Python内置json实现数据本地持久化详解

2025年03月05日 Python 我要评论
四个json函数函数json.load()将本地json数据文件读取出来,并以列表形式返回从文件对象中读取 json 格式的字符串,并将其反序列化为 python对象json.loads()将 jso

四个json函数

函数
json.load()将本地json数据文件读取出来,并以列表形式返回从文件对象中读取 json 格式的字符串,并将其反序列化为 python 对象
json.loads()将 json 格式的字符串反序列化为 python 对象
json.dump()将 python 对象序列化为 json 格式的字符串,并将其写入文件对象。
json.dumps()将 python 对象序列化为 json 格式的字符串

将数据以json文件保存在本地的方式

使用file.open()

实例数据

class person:
    name = none
    age = none
    def __init__(self, name, age):
        self.name = name
        self.age = age

person1 = person("alice", 30)
person2 = person("bob", 25)
person3 = person("charlie", 35)
person4 = person("david", 28)
person5 = person("eve", 32)

persons = [person1, person2, person3, person4, person5]
person_list = [person.__dict__ for person in persons]
print(person_list)

'''
[{'name': 'alice', 'age': 30}, {'name': 'bob', 'age': 25}, {'name': 'charlie', 'age': 35}, {'name': 'david', 'age': 28}, {'name': 'eve', 'age': 32}]
<class 'list'>

返回的是一个列表
'''

object.__dict__

object.__dict__ 是 python 中的一个特殊属性,用于存储对象的实例属性。每个 python 对象都有一个 __dict__ 属性,它是一个字典,包含了对象的所有实例属性及其对应的值

将对象的数据保存到json中,需要先使用对象.__dict__将每一个对象的字典形式取出(使用列表推导式),在将每一个对象的字典形式保存在列表中,将列表保存在json文件中

data_list = [person.__dict__ for person in persons] # 列表推导式

保存数据

def load_data():
    with open(data_file, 'r', encoding='utf-8') as file:
        return json.load(file)

读取数据

def save_data(persons):
    with open(data_file, 'w', encoding='utf-8') as file:
        json.dump([person.__dict__ for person in persons], file, indent=2)

注意事项

open() 函数自动创建文件:

'r' 模式(只读模式)下,如果文件不存在,会直接抛出 filenotfounderror,不会自动创建文件。

只有使用'w'(写入模式)或 'a'(追加模式)时,如果文件不存在,才会自动创建。

实际案例:

class houseservice:
    house_list = []
    data_file = os.path.join(os.path.dirname(__file__), 'house_data.json')
    def __init__(self):
        self.load_data()
        if not self.house_list:
            house1 = house('1', 'lihua', '123456', '郑州中原区', 800, '未出租')
            house2 = house('2', 'jack', '123452', '郑州市二七区', 900, '未出租')
            self.house_list.append(house1)
            self.house_list.append(house2)
            self.save_data()

    
    # 加载房屋数据
    def load_data(self):
        try:
            with open(self.data_file, 'r', encoding='utf-8') as file:
                data = json.load(file)
                self.house_list = [house(**house) for house in data]
        except filenotfounderror:
            self.house_list = []
    
    # 保存房屋数据
    def save_data(self):
        with open(self.data_file, 'w', encoding='utf-8') as file:
            json.dump([house.__dict__ for house in self.house_list], file, ensure_ascii=false, indent=4)

在此案例下,load_data()函数如果不采用异常捕获的话,且文件夹中并没有house_data.json文件时,系统将直接抛出异常,当捕获异常之后,并初始化数据列表,程序可以继续向下进行,来到save_data()保存数据,并自动创建json文件

所以在开发过程中,编写保存房屋数据时,注意异常捕获

追加数据

如果有新的数据需要保存,不能直接使用mode='a', 'a'模式追加写入,会导致json文件变成多个独立对象而不是有效数组,新追加的数据会直接保存在[]外面

[{...}, {...}]  // 原始数据
{...}           // 新追加数据(格式错误)

所以要向json文件中追加数据,需要用到一下方法:

采用读取→修改→覆盖写入的模式(而不是直接追加)

使用'w'模式保证每次写入完整的json数组结构

import os
import json

# 示例数据
data = {
    "name": "alice",
    "age": 30,
    "skills": ["python", "docker"],
    "is_active": true
}

data_dile = os.path.join(os.path.dirname(__file__), 'person_data.json')

def save_data(data):
    with open(data_dile, 'w', encoding='utf-8') as file:
        json.dump(data, file, indent=2)

def load_data():
    with open(data_dile, 'r', encoding='utf-8') as file:
        data = json.load(file)
        return data

exist_data = load_data() # 取出现有数据
print(type(exist_data))	# <class 'list'>
exist_data.append(data)	# 想列表中追加数据
save_data(exist_data) # 保存追加过数据后的列表

到此这篇关于python内置json实现数据本地持久化详解的文章就介绍到这了,更多相关python数据本地持久化内容请搜索代码网以前的文章或继续浏览下面的相关文章希望大家以后多多支持代码网!

(0)

相关文章:

版权声明:本文内容由互联网用户贡献,该文观点仅代表作者本人。本站仅提供信息存储服务,不拥有所有权,不承担相关法律责任。 如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 2386932994@qq.com 举报,一经查实将立刻删除。

发表评论

验证码:
Copyright © 2017-2025  代码网 保留所有权利. 粤ICP备2024248653号
站长QQ:2386932994 | 联系邮箱:2386932994@qq.com