You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用Python操作JSON数据库:删除值及同名对象更新

实现类JSON数据库的Python方案

首先修正你提供的JSON示例语法错误,合理的数据库结构可设计为包含多个对象的列表,每个对象包含name(你提到的“名称”)和object_id字段,示例如下:

{
  "objects": [
    {"name": "demo_obj", "object_id": 12345678}
  ]
}

以下是满足你需求的具体实现:

1. 定义数据库类

import json
import os

class JSONDatabase:
    def __init__(self, file_path):
        self.file_path = file_path
        # 初始化数据库文件(不存在则创建空结构)
        if not os.path.exists(file_path):
            with open(file_path, 'w', encoding='utf-8') as f:
                json.dump({"objects": []}, f)
        self.load_data()

    def load_data(self):
        # 从文件加载数据
        with open(self.file_path, 'r', encoding='utf-8') as f:
            self.data = json.load(f)

    def save_data(self):
        # 将数据写入文件持久化
        with open(self.file_path, 'w', encoding='utf-8') as f:
            json.dump(self.data, f, indent=2)

    def update_or_add_object(self, name, object_id):
        # 查找名称匹配的对象,存在则更新,不存在则新增
        for idx, obj in enumerate(self.data["objects"]):
            if obj["name"] == name:
                obj["object_id"] = object_id
                self.save_data()
                return f"已更新名称为'{name}'的对象,新object_id: {object_id}"
        self.data["objects"].append({"name": name, "object_id": object_id})
        self.save_data()
        return f"已添加新对象:名称'{name}',object_id: {object_id}"

    def delete_object(self, name=None, object_id=None):
        # 支持按名称或object_id删除对象
        if not name and not object_id:
            return "必须提供名称或object_id作为删除条件"
        
        initial_count = len(self.data["objects"])
        # 过滤保留无需删除的对象
        self.data["objects"] = [
            obj for obj in self.data["objects"]
            if not (name and obj["name"] == name) and not (object_id and obj["object_id"] == object_id)
        ]
        
        if len(self.data["objects"]) == initial_count:
            return "未找到匹配的对象"
        self.save_data()
        return "已删除匹配的对象"

2. 使用示例

# 初始化数据库(文件不存在时自动创建)
db = JSONDatabase("my_db.json")

# 添加/更新对象
print(db.update_or_add_object("test_obj", 12345678))  # 首次执行:添加新对象
print(db.update_or_add_object("test_obj", 87654321))  # 再次执行:更新已有对象的object_id

# 删除对象
print(db.delete_object(name="test_obj"))  # 按名称删除
print(db.delete_object(object_id=87654321))  # 按object_id删除

关键功能说明

  • 自动更新逻辑:update_or_add_object方法遍历现有对象,匹配到相同名称则更新object_id,未匹配到则直接新增对象。
  • 删除功能:支持按对象名称或object_id两种条件删除,覆盖不同场景需求。
  • 数据持久化:每次操作后自动将数据写入JSON文件,避免数据丢失。

如果你的JSON结构需要调整(比如以对象名称作为字典键),可修改核心方法逻辑,示例如下:

# 替代结构:{"objects": {"demo_obj": {"object_id": 12345678}}}
def update_or_add_object(self, name, object_id):
    self.data["objects"][name] = {"object_id": object_id}
    self.save_data()
    return f"已更新/添加对象'{name}',object_id: {object_id}"

def delete_object(self, name):
    if name in self.data["objects"]:
        del self.data["objects"][name]
        self.save_data()
        return "已删除对象"
    return "未找到对象"

内容的提问来源于stack exchange,提问作者Swampy

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.24 19:18:19