当从chrome.storage.local检索复杂的JSON对象时,该对象正在崩溃。
mock.json
{
"ThingOne" : [
"a",
"b"
],
"ThineTwo" : [
"a",
"b"
],
"People" : {
"FamilyOne" : {
"AgeOne" : "3",
"AgeTwo" : "8"
}
},
"Hats" : ["blue", "red", "green"]
}
并且我正在(正确地)使用
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保存到铬存储/本地存储帮不了我。控制台图片
发布于 2020-11-17 12:09:49
代码中存在多个问题。
fetch
和chrome.storage
都是异步的,因此您的chrome.storage.local.get
将在数据设置之前运行,并且不会看到正确的数据。waitfunction();
不会等待任何东西,它不会在它之前或之后影响异步代码。chrome.storage.local.get('StoredJson', callback)
将数据读入名为StoredJson
的对象属性,即可以将值读入为result.StoredJson
。总的来说,一个合适的现代解决方案是切换到async/await
(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);
});
}
https://stackoverflow.com/questions/64871758
复制相似问题