写入本地JSON文件javascript

时间:2018-05-15 19:39:21

标签: javascript html json

我试图用javascript写入我的本地JSON文件,我从我的HTML中获取它,更改它并想要写回来。我找到了如何从here读取它,但没有找到如何将其写回json文件。

  

注意:我希望没有Node.js,' fs'没有帮助..

获取JSON文件的代码:

<script type="text/javascript" src="data.json></script>
<script type="text/javascript" src="javascrip.js"></script>

var mydata = JSON.parse(data);

然后我更改了&#39; name&#39;的值,例如。

mydata["name"] = "NewName";

然后我想将它发送回json文件,更新它。

我没有找到任何代码可以这样做。

3 个答案:

答案 0 :(得分:3)

由于浏览器的安全限制,您无法写入文件系统。

你只能这样做 - https://stackoverflow.com/a/30800715/6149665

答案 1 :(得分:3)

正如ArtemSky所说,你不能写入本地文件系统。实现您想要做的事情的方法是使用可以写入本地文件系统或数据库或其他任何内容的服务器。

因此,您希望将数据存储在某处,即服务器上的本地文件,云中的本地文件等,或者某种数据库。然后,您可以在服务器上设置一个API,您可以远程调用该API以通过XMLHttpRequest(XHR)

获取数据

然后,您将创建另一个API方法,您可以使用该方法发回数据,然后使用更新的/新数据调用该数据。

写入本地文件系统是一个安全问题,因为如果任何可以编写代码的人都可以覆盖您的系统文件。阻止写入本地文件系统的能力是使Web安全的唯一方法。

答案 2 :(得分:2)

由于安全限制,您无法直接写入文件系统,但您可以触发保存对话框以请求用户保存文件。我使用这个功能,适用于主流浏览器的所有最新版本。

function download(data, filename) {
    // data is the string type, that contains the contents of the file.
    // filename is the default file name, some browsers allow the user to change this during the save dialog.

    // Note that we use octet/stream as the mimetype
    // this is to prevent some browsers from displaying the 
    // contents in another browser tab instead of downloading the file
    var blob = new Blob([data], {type:'octet/stream'});

    //IE 10+
    if (window.navigator.msSaveBlob) {
        window.navigator.msSaveBlob(blob, filename);
    }
    else {
        //Everything else
        var url = window.URL.createObjectURL(blob);
        var a = document.createElement('a');
        document.body.appendChild(a);
        a.href = url;
        a.download = filename;

        setTimeout(() => {
            //setTimeout hack is required for older versions of Safari

            a.click();

            //Cleanup
            window.URL.revokeObjectURL(url);
            document.body.removeChild(a);
        }, 1);
    }
}

值得一提的是,HTML5规范具有download属性,但IE目前尚不支持。