在javascript中将json对象写入文本文件

时间:2014-02-26 23:13:55

标签: javascript json

我在javascript中有一个JSON对象。我想简单地将JSON对象写入文本文件。从目前为止我遇到的事情表明,由于客户端的安全问题,不可能这样做。有解决方法吗?如果最初放置一些虚拟值,是否可以修改已存在的文件?

由于

2 个答案:

答案 0 :(得分:35)

您可以做的一件事是将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的评论。

另一个更正:抱歉,Filesystem API未在使用中。来自HTMl5Rocks网站:“2014年4月,在public-webapps上公布了Filesystem API规范应该被认为已经死亡。其他浏览器对实现它没有兴趣。”

答案 1 :(得分:0)

也许这个解决方案更加优雅,在Chrome,FF和ie7到ie10中进行测试,使用文本,JSON,PDF和XLS数据进行测试(使用适当的内容类型)

saveFile()函数提供数据blob,或者动态创建数据blob,type设置为空,数据在[]&#39; s < / p>

在这个例子中,我们只是对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);  
}