【问题标题】:export Data in localStorage for later re-import在 localStorage 中导出数据以供以后重新导入
【发布时间】:2012-10-31 10:04:00
【问题描述】:

我想从我的 localStorage 中导出一些项目以将其保存在外部但以某种格式保存,以便以后再次导入。

我的尝试是编写可以稍后粘贴到文本区域中的可执行代码。然后该 textare 的值将简单地被 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") + '");');

如果我的尝试似乎没问题,那么创建可以按原样执行的代码的最佳方法是什么?

【问题讨论】:

    标签: javascript import export local-storage


    【解决方案1】:

    这是导入/导出整个 localStorage 的方法

    导出

    copy(JSON.stringify(localStorage));
    

    这会将您的 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]));
    });
    

    【讨论】:

    • 为了导入,我们还需要两个 JSON.parse()
    • 嗯,不应该是:localStorage.setItem(k, JSON.stringify(data[k])) 以便数据作为字符串返回到本地存储?
    • @EFC 使用 JSON.stringly 可能会因添加不需要的引号而引起麻烦。
    【解决方案2】:

    只是 Jeremy 的改进版。简化流程

    copy('var data = '+JSON.stringify(localStorage)+';Object.keys(data).forEach(function (k){localStorage.setItem(k, JSON.stringify(data[k]));});');
    

    在您需要导出的控制台中运行此程序,它将本地存储内容与代码一起复制到剪贴板,然后将其粘贴到您要导入的控制台中。

    【讨论】:

      【解决方案3】:

      您可以使用 JSON.stringify(对象到字符串)将对象编码为字符串,并使用 JSON.parse(字符串到对象)将字符串解码为对象。

      写入本地存储

      localStorage.setItem("varname",JSON.stringify(originalVarname));
      

      从本地存储读取

      var originalVarname= JSON.parse(localStorage.getItem("varname"));
      

      【讨论】:

        【解决方案4】:

        导出

        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]);
        });
        

        【讨论】:

        • 我需要像上面那样字符串化两次。一次字符串化对我不起作用。
        【解决方案5】:

        只是@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))`)
        

        【讨论】:

          猜你喜欢
          • 2015-12-06
          • 1970-01-01
          • 2021-12-21
          • 1970-01-01
          • 2020-08-26
          • 1970-01-01
          • 2016-05-03
          • 2022-11-02
          • 2021-08-24
          相关资源
          最近更新 更多