我需要将Javascript对象保存到文件中,因此可以轻松地将其重新加载到变量中,修改并最终重新保存。这在Javascript中是否可行,如果是这样,最好的方法是什么。例如,如果我有:
o = {"test": 2};
如何将其保存到文件,加载,修改和保存?与Python中的pickle
完全相同。
感谢。
答案 0 :(得分: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等编写的服务器端脚本......
答案 1 :(得分:3)
尽管有相反的答案,但这确实是可能的。但它受浏览器支持的限制。您可以在最新版本的Chrome中使用新的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");
});
由于您只希望文件供自己使用,因此这种沙盒方法可行。还有一些需要跳过的箍(请求配额,创建Blob
对象)但链接文章涵盖了这些箍,这些都将取决于您的要求。
答案 2 :(得分:0)
您可以使用元素上的“下载”属性来保存文件。 这是通过编程方式完成的:
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();
}