Google chrome extension 在chrome.storage中更新复杂的数据结构而不重新保存所有内容是否可能?

Google chrome extension 在chrome.storage中更新复杂的数据结构而不重新保存所有内容是否可能?,google-chrome-extension,Google Chrome Extension,如果我想存储来自chrome扩展的持久数据,我会将一个对象写入chrome.storage: chrome.storage.sync.set({key: value}); 据我所知,这意味着我必须将所有扩展的数据存储在一个对象中。这很好,但如果我只想更新该数据结构中的一个字段,该怎么办?想象一下我的chrome.storage.sync是 { friends: [ { name: "Billy", age: 28 } ], enemies: [

如果我想存储来自chrome扩展的持久数据,我会将一个对象写入
chrome.storage

chrome.storage.sync.set({key: value});
据我所知,这意味着我必须将所有扩展的数据存储在一个对象中。这很好,但如果我只想更新该数据结构中的一个字段,该怎么办?想象一下我的
chrome.storage.sync

{
    friends: [
        { name: "Billy", age: 28 }
    ],

    enemies: [
        { name: "Penny", age: 18 },
        { name: "Mortimer", age: 51 }
    ]
}

现在假设我想进去更新一下莫蒂默的年龄。我必须重建上面的整个对象,修改适当的字段,然后将整个对象写回存储器。我不可能只更新一个字段吗

您问题中的假设是不正确的:“这意味着我必须将扩展的所有数据存储在一个对象中。”

您可以使用任意数量的对象。例如,一个键用于好友列表,一个键用于通过某个唯一id映射到第一个列表的每个好友


使用indexedDb或不推荐使用的web sql时,这要容易得多,因为您可能仍然有一些需要完全重新保存的大型对象,例如朋友列表。

当然,您无法在API文档中看到。
chrome.storage
透明地序列化数据。因此,存储实际上看起来更像是
敌人:'[{“name”:“Penny”,“age”:18},{“name”:“Mortimer”,“age”:51}]
是否可以从background.js使用indexedDB?没什么,我只是想在开始编码之前确保方向正确。@JackM,您可以使用后台脚本中的任何存储,正如您在许多googlable示例中看到的那样。