首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >使用chrome.storage.local.set时JSON对象受到损坏

使用chrome.storage.local.set时JSON对象受到损坏
EN

Stack Overflow用户
提问于 2020-11-17 08:33:52
回答 1查看 122关注 0票数 0

当从chrome.storage.local检索复杂的JSON对象时,该对象正在崩溃。

mock.json

代码语言:javascript
运行
复制
{
"ThingOne" : [
    "a", 
    "b"
],
"ThineTwo" : [
    "a", 
    "b"
],
"People" : {
    "FamilyOne" : {
        "AgeOne" : "3",
        "AgeTwo" : "8"
    }
},
"Hats" : ["blue", "red", "green"]

}

并且我正在(正确地)使用

代码语言:javascript
运行
复制
    fetch('./mock.json').then(response => {
      console.log(response);
      return response.json();
    }).then(data => {
        //data == the whole json file

        var data2 = JSON.stringify(data);
        chrome.storage.local.set({'StoredJson': data2});

        //here this is the result of this code
        //console.log(data2.ThingOne[0]);
        //outputs => "a"

    
    }).catch(err => {
        console.log("Error Reading data " + err);
    });
    
    waitfunction();
    chrome.storage.local.get('StoredJson', function(result) {
        console.log("from get ------"); //outputs below
        console.log(result); //{Data: ""{\"ThingOneOne\":[\"a\",\"b\"],\...
        console.log(typeof result); //object
        console.log(typeof result.ThingOne);//undefined
        //https://imgur.com/OF7pVQQ
    });  

为什么当我获取对象时,它是工作的,而当我检索对象时,它却不能工作。我试过把它保存在JSON.stringifying之后。在返回的JSON.parsing之后,我尝试使用它

VM6 6:1 SyntaxError: JSON.parse ()位置1处JSON中的意外令牌o

指示它已经是JS对象。我试过用点表示法和括号,但它不起作用。当我将它作为var data = {//json }存储在chrome控制台中时,它可以工作。但不能活下去。StackOverflow:将json保存到铬存储/本地存储帮不了我。控制台图片

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-11-17 12:09:49

代码中存在多个问题。

  1. 不需要JSON.stringify。直接存储数据就行了。
  2. fetchchrome.storage都是异步的,因此您的chrome.storage.local.get将在数据设置之前运行,并且不会看到正确的数据。
  3. waitfunction();不会等待任何东西,它不会在它之前或之后影响异步代码。
  4. chrome.storage.local.get('StoredJson', callback)将数据读入名为StoredJson的对象属性,即可以将值读入为result.StoredJson

总的来说,一个合适的现代解决方案是切换到async/await

代码语言:javascript
运行
复制
(async () => {
  try {
    const data = await (await fetch('./mock.json')).json();
    console.log('Fetched', data);
    await writeStorage({StoredJson: data});
    const {StoredJson} = await readStorage('StoredJson');
    console.log('Stored', StoredJson);
  } catch (err) {
    console.log(err);
  }
})();

function readStorage(key) {
  return new Promise(resolve => {
    chrome.storage.local.get(key, resolve);
  });
}

function writeStorage(data) {
  return new Promise(resolve => {
    chrome.storage.local.set(data, resolve);
  });
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/64871758

复制
相关文章

相似问题

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