我在 javascript 中有一个 JSON 对象。我想简单地将 JSON 对象写入文本文件。从我到目前为止遇到的事情来看,由于客户端的安全问题,这是不可能的。有解决方法吗?如果最初放置一些虚拟值,是否可以修改已经存在的文件?
谢谢
我在 javascript 中有一个 JSON 对象。我想简单地将 JSON 对象写入文本文件。从我到目前为止遇到的事情来看,由于客户端的安全问题,这是不可能的。有解决方法吗?如果最初放置一些虚拟值,是否可以修改已经存在的文件?
谢谢
您可以做的一件事是将 JSON 设置为动态下载。
var data = "{name: 'Bob', occupation: 'Plumber'}";
var url = 'data:text/json;charset=utf8,' + encodeURIComponent(data);
window.open(url, '_blank');
window.focus();
工作演示:http : //jsfiddle.net/sLq3F/
除此之外,出于安全原因,您无法将 JSON 写入客户端的文件。(否则,您可以访问网站用户的文件系统。)为此,您必须使用服务器端语言,并将文件存储在服务器端。
更正:看起来您可以写入文件,即用户文件系统的“沙盒部分”。请参阅下面的 Kevin Jantzer 的评论。
另一个更正:抱歉,未使用文件系统 API。来自 HTMl5Rocks 网站:“2014 年 4 月,公共网络应用程序宣布文件系统 API 规范应被视为已死。其他浏览器对实现它几乎没有兴趣。”
也许这个解决方案更优雅一点,在 Chrome、FF 和 ie7 到 ie10 中测试,使用文本、JSON、PDF 和 XLS 数据进行测试(使用适当的内容类型)
要么为saveFile()
函数提供一个数据 blob,要么动态创建一个数据 blob,type
设置为空,并且你的数据在[]
's之间
在此示例中,我们将仅对settings
对象进行字符串化,并正确设置数据类型。
settings = { any_kind_of_object: true };
json_str = JSON.stringify(settings);
saveFile('yourfilename.json', "data:application/json", new Blob([json_str],{type:""}));
function saveFile (name, type, data) {
if (data != null && navigator.msSaveBlob)
return navigator.msSaveBlob(new Blob([data], { type: type }), name);
var a = $("<a style='display: none;'/>");
var url = window.URL.createObjectURL(new Blob([data], {type: type}));
a.attr("href", url);
a.attr("download", name);
$("body").append(a);
a[0].click();
setTimeout(function(){ // fixes firefox html removal bug
window.URL.revokeObjectURL(url);
a.remove();
}, 500);
}