【问题标题】:How to append JSON to already existing file with Javascript?如何使用 Javascript 将 JSON 附加到现有文件?
【发布时间】:2013-07-05 07:44:53
【问题描述】:

假设我有一个名为“data.json”的数据文件,其中包含一些 JSON,或者它可以是空白的。我创建了一个函数,将我的 JSON 字符串打包到一个变量中,所以如果我这样做了,

var myJSONVar = myJSONString;
console.log(myJSONVar);

我会打印,

[{ "my":"JSON" }]

如何使用 Javascript 将 myJSONVar 的内容转储到“data.json”文件,而无需使用服务器端语言或外部 JS 库?这完全不可能吗?

【问题讨论】:

  • 文件在哪里?如果它在服务器上,您将需要一个服务器端脚本来为您处理它。除非您有服务器端脚本将其下载给您,否则我无法从浏览器本地保存文件。
  • 最简单的答案是,“是的,这完全不可能。”您确实没有提供足够的信息,但这不是您在网络浏览器中使用纯 JavaScript 所做的那种事情。
  • 如果您担心必须提交和刷新页面,您可以使用 AJAX 模式来解决这个问题:您有一个服务器端脚本(例如 PHP),它编写文件,但您可以使用 javascript 从您的页面调用该服务器端脚本。
  • 我不太确定服务器端 node.js 在这种情况下是否会有所帮助。
  • 好的,使用 Ajax 请求怎么样?

标签: javascript json variables append


【解决方案1】:

我不认为这是不可能的,除非你在谈论旧机器,在这种情况下你需要某种服务器回显。

在所有三个主要浏览器的当前版本中,您可以使用 JS 从字符串中下载具有自定义名称的文件:

<script>
//from: http://danml.com/js/download.js
function download(strData, strFileName, strMimeType) {
    var D = document,
        A = arguments,
        a = D.createElement("a"),
        d = A[0],
        n = A[1],
        t = A[2] || "text/plain";

    //build download link:
    a.href = "data:" + strMimeType + "," + escape(strData);


    if (window.MSBlobBuilder) {
        var bb = new MSBlobBuilder();
        bb.append(strData);
        return navigator.msSaveBlob(bb, strFileName);
    } /* end if(window.MSBlobBuilder) */



    if ('download' in a) {
        a.setAttribute("download", n);
        a.innerHTML = "downloading...";
        D.body.appendChild(a);
        setTimeout(function() {
            var e = D.createEvent("MouseEvents");
            e.initMouseEvent("click", true, false, window, 0, 0, 0, 0, 0, false, false, false, false, 0, null);
            a.dispatchEvent(e);
            D.body.removeChild(a);
        }, 66);
        return true;
    } /* end if('download' in a) */
    ; //end if a[download]?

    //do iframe dataURL download:
    var f = D.createElement("iframe");
    D.body.appendChild(f);
    f.src = "data:" + (A[2] ? A[2] : "application/octet-stream") + (window.btoa ? ";base64" : "") + "," + (window.btoa ? window.btoa : escape)(strData);
    setTimeout(function() {
        D.body.removeChild(f);
    }, 333);
    return true;
} /* end download() */


   var myJSONVar = [{ "my":"JSON" }];
   download( JSON.stringify(myJSONVar, null, "\t"), "data.json", "text/plain");
</script>

【讨论】:

  • 我真的需要下载它吗?该文件将已经创建,我唯一需要的是修改其内容的能力。使用 Ajax 怎么样?
  • 啊,那不一样。尽管您可以轻松地将字符串转储到 JS 中的下载文件中,但您无法在没有服务器帮助的情况下修改 SERVER 文件,但有一些越来越少见的例外情况。如果只有一个人需要附加数据,你可以使用localStorage在浏览器中存储它,但如果每个人都需要它,你必须使用php/asp/whatever脚本来修改服务器的副本或ftp上传新的副本你自己。您至少可以使用上面的代码来生成新的副本到 ftp,最坏的情况......
猜你喜欢
  • 2019-07-23
  • 2018-11-17
  • 2018-07-04
  • 1970-01-01
  • 2017-03-14
  • 2018-03-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多