首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >在json文件中插入一个对象而不重写整个文件

在json文件中插入一个对象而不重写整个文件
EN

Stack Overflow用户
提问于 2015-10-24 18:30:12
回答 2查看 2.6K关注 0票数 3

我正在研究一种方法,它使用JSON.NET向JSON格式的马匹数据库中添加一个add对象。一种选择是将整个文件反序列化为一个马列表,添加新的马,然后序列化列表并重写整个文件。我已经在下面的代码中实现了这种方法。

代码语言:javascript
运行
复制
    // adds a horse to the db
    public int AddHorse(Horse horse)
    {
        // identify and assign next available id to horse
        var horses = GetAllHorses();
        int nextId = horses.Max(h => h.ID) + 1;
        horse.ID = nextId; 

        // Add horse to list
        horses.Add(horse);

        // Write entire list to JSON file. Can I just insert one new horse into the file?
        using (FileStream fs = File.Open(_jsonHorseDbFilePath, FileMode.Create))
        using (StreamWriter sw = new StreamWriter(fs))
        using (JsonWriter jw = new JsonTextWriter(sw))
        {
            jw.Formatting = Formatting.Indented;

            JsonSerializer serializer = new JsonSerializer();
            serializer.Serialize(jw, horses);
        }

        return nextId;
    }

虽然这很有效,但对我来说却是低效的。理想情况下,我可以简单地将新的马对象插入到JSON文件中,而无需重写所有内容。然而,我一直在寻找谷歌,但还没有找到一个方法来做到这一点。有没有人知道这是否有可能,如果有,我在这种情况下会如何处理?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2015-10-24 18:44:54

JSON不是一种数据库格式,磁盘上的JSON文件只是一个平面文件,其数据恰好是结构化的,允许您将其作为对象处理--内存中的数据。但是在磁盘上,它只是一个文本文件,而文件系统的设计并不是为了有效地将数据插入到文件的中间,而不是像the answers here所建议的那样,对文件系统本身进行非常复杂的操作。

是的,效率很低。如果您想提高效率,请使用为更新而设计的数据库。但是,对于相对较小的JSON文件,如果将整个文件保存到磁盘只需一秒时间,这种理论上的效率低下可能毫无意义。

票数 5
EN

Stack Overflow用户

发布于 2015-10-24 18:44:32

不,不行,因为序列化程序应该读取整个文件来完成构建JSON对象结构。同时,这可以通过手工编辑文本文件来完成,但是这个解决方案将是值得怀疑的。如果您希望快速读取/写入数据,则可能应该考虑另一种数据结构形式,例如,在DB中使用keepeing forms。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/33321815

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档