我想从本地存储中导出一些项目以将其保存在外部,但采用某种格式,以便稍后可以再次导入。
我的尝试是编写可以稍后粘贴到文本区域中的可执行代码。然后该文本的值将被简单地 eval()ed。
问题:存储在localStorage中的数据存储为
var data = [];
data.push('sampledata');
data.push({sample: 'object'});
localStorage.setItem('varname',data);
所以它包含各种我不喜欢的字符,比如',“等
到目前为止我的(不起作用)解决方案是:
var container = $('#localDataContainer');
container.append('localStorage.setItem("cockpitLastVisited","' + localStorage.getItem("cockpitLastVisited") + '");<br/>');
container.append('localStorage.setItem("cockpit_services","' + localStorage.getItem("cockpit_services") + '");<br/>');
container.append('localStorage.setItem("cockpit_users","' + localStorage.getItem("cockpit_users") + '");');
如果我的尝试似乎没问题,那么创建可以按原样执行的代码的最佳方法是什么?
以下是导入/导出整个本地存储的方法
导出
copy(JSON.stringify(localStorage));
这会将您的本地存储复制到剪贴板。 (您需要两个 JSON.stringify() 来转义引号。)
导入
var data = JSON.parse(/*paste stringified JSON from clipboard*/);
Object.keys(data).forEach(function (k) {
localStorage.setItem(k, JSON.stringify(data[k]));
});
只是 Jeremy 的改进版本。为了简化流程
copy('var data = '+JSON.stringify(localStorage)+';Object.keys(data).forEach(function (k){localStorage.setItem(k, data[k]);});');
在需要导出的控制台中运行此命令,它将本地存储内容连同代码复制到剪贴板,然后将其粘贴到要导入的控制台中。
您可以使用 JSON.stringify(对象到字符串)将对象编码为字符串,并使用 JSON.parse(字符串到对象)将字符串解码为对象。
写入本地存储
localStorage.setItem("varname",JSON.stringify(originalVarname));
从本地存储读取
var originalVarname= JSON.parse(localStorage.getItem("varname"));
导出
copy(JSON.stringify(JSON.stringify(localStorage)));
导入
var data = JSON.parse(/*previously copied stringified JSON from clipboard*/);
Object.keys(data).forEach(function (k) {
localStorage.setItem(k, data[k]);
});
只是@iceLord答案的现代化版本。
只需在控制台中运行此命令,它会将恢复 localStorage 的代码放回到剪贴板中。
copy(`Object.entries(${JSON.stringify(localStorage)})
.forEach(([k,v])=>localStorage.setItem(k,v))`)
书签版本
javascript:prompt(`localStorage from ${location.host}${new Date().toLocaleString()}`, `/* localStorage from ${location.host}${new Date().toLocaleString()}*/Object.entries( ${JSON.stringify(localStorage)}).forEach(([k,v])=>localStorage.setItem(k,v))`)
这将返回一个包含本地存储中所有项目的对象
copy(JSON.stringify(localStorage)); // one
上传回浏览器 -
var data = {//object that we got from one}
Object.keys(data).forEach(function (k) {
localStorage.setItem(k, JSON.stringify(data[k]));
});
只是更新,所有功劳都归杰里米