将Javascript对象保存到文件中

9

我需要将一个JavaScript对象保存到文件中,以便可以轻松地重新加载到变量中进行修改,并最终重新保存。在JavaScript中是否可行,如果是的话,最佳方法是什么?例如,如果我有:

o = {"test": 2};

如何将它保存到文件中,加载、修改并保存?就像Python中的pickle一样。

谢谢。


仅使用JavaScript是不可能实现的。最好的方法是使用localStorage,但这不是永久性存储。 - Sterling Archer
你需要将对象序列化并将结果字符串发送到脚本语言(如Java、PHP等),以便能够创建一个文件。 - Benedikt
为什么你想要解雇水...?无法重新保存。 - Prasath K
也许你想要使用新的文件系统API?虽然我不认为这属于可行的范畴。 - CodingIntrigue
3个回答

4
尽管有许多相反的答案,但确实是可以做到的。然而,它受浏览器支持的限制。您可以在最新版本的Chrome等浏览器中使用新的FileSystem API: FileSystem APIs
window.requestFileSystem  = window.requestFileSystem || window.webkitRequestFileSystem;
window.requestFileSystem(window.PERSISTENT, 1024, function(fs) {
    fs.root.getFile('mystorage.txt', {create: true, exclusive: true}, function(file) {
        file.createWriter(function(writer) {
            var blob = new Blob(["putdatahere"], {type: 'text/plain'});
            writer.write(blob);
        });
    });
}, function() {
    console.log("Could not access file system");
});

如果你只需要自己使用文件,那么这种沙盒方法可以使用。但是,你需要进行更多步骤(请求配额,创建对象),但这些步骤在链接的文章中有详细说明,具体取决于你的要求。


3
你贴出的链接中值得强调的是:“在2014年4月,公众网络应用程序(public-webapps)宣布,文件系统API规范并未被其他浏览器考虑。目前,该API仅适用于Chrome浏览器,并且不太可能被其他浏览器实现,也不再是W3C的标准规范。” - MattSidor

3
如果您真正需要处理文件,则客户端无法实现。但是,如果您只想存储和调用数据,则可以使用cookie(如果它很小)。 http://www.sitepoint.com/how-to-deal-with-cookies-in-javascript/ 如果数据较大,则必须使用HTML5 LocalStorage。但是,这仅适用于新版本的浏览器。
您可以使用以下方法创建访问计数器:
//try to load the data
var o = localStorage.getItem("mydata");
//if the data is empty set the data
if(!o) o = {"test": 0};
//increment the test value inside of o by one each time
o.test++;
//save the data to local storage
localStorage.setItem("mydata", JSON.stringify(o));

http://diveintohtml5.info/storage.html

请注意,此方法仅适用于像Chrome这样的现代浏览器。

传统的方法是通过AJAX将其发送到使用PHP、Python、Ruby、Java等编写的服务器端脚本。


提醒一下,你的示例代码无法正常运行。因为localStorage只支持字符串类型的值,所以你需要先使用JSON.Stringify(o)将其转换为字符串再进行存储。 - Steve

2
你可以在一个元素上使用“download”属性来保存文件。 以下是编程实现的方法:
function saveJSON() {
   let data = "Whatever it is you want to save";
   let bl = new Blob([data], {
      type: "text/html"
   });
   let a = document.createElement("a");
   a.href = URL.createObjectURL(bl);
   a.download = "data.json";
   a.hidden = true;
   document.body.appendChild(a);
   a.innerHTML =
      "someinnerhtml";
   a.click();
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接