将json对象写入json文件

时间:2014-08-27 16:38:02

标签: jquery ajax json

在我的代码中,我成功使用了这个结构:

$.getJSON('Json_users_templates/SO_example.json', function(data) {
});

从本地.json文件获取JSON数据到对象。

现在我需要一些代码将更改的对象写入另一个本地.json文件..

我尝试使用如下代码:

$.ajax
    ({
        type: "GET",
        dataType : 'json',
        async: false,
        url: 'http://your.host/save_json.php',
        data: { data: JSON.stringify(eventsholded) },
        success: function () {alert("Thanks!"); },
        failure: function() {alert("Error!");}
    });

和.php-reciever

<?php
$myFile = "general.json";
$fh = fopen($myFile, 'w') or die("can't open file");
$stringData = $_GET["data"];
fwrite($fh, $stringData);
fclose($fh)
?>

但它不起作用,firefox在.php文件中显示错误..

我只需要编写像

这样的json对象
var jsondata = {
    name : "bobby",
    age: "77"
};

到.json文件..我可以不使用PHP吗?我应该向output.json添加任何内容以使其接受新数据吗?

3 个答案:

答案 0 :(得分:0)

浏览器JavaScript无法将文件写入您的服务器。

这意味着如果您想要写入自己的服务器,则必须使用AJAX和一些服务器端语言(PHP,ASP.net等)。

浏览器在网页上对Javascript进行沙盒处理,这样他们也无法将文件写入用户计算机。您可以做的是向浏览器发送运行时生成的文件,就好像用户点击了链接,然后用户可以手动保存文件。新的HTML5 Filewrite API 可能有效,但它很新,大多数浏览器还不支持它。

答案 1 :(得分:0)

创建数据:URI,基本上我是这样做的:

1)将所有内容放入字符串中,即可使用

content = JSON.stringify(YOUR_JSON) 

2)构建数据URI:

uriContent = "data:application/json," + encodeURIComponent(content)

根据浏览器类型等,会有长度限制。使用encodeURIComponent编码Base64(atob / btoa)可能会提高效率。

3)打开一个新窗口并将其“重定向”到此URI提示下载位置:

newWindow = window.open(uriContent, 'JSON');

就是这样。

答案 2 :(得分:0)

正确的方法是使用 HTML5 FileWriter API 在本地编写文件, 我有一个方便的代码,可以使用相同的console.log方式使用, 虽然它确实保存了.json文件,但它询问你在哪里保存它。 试一试。

// for JSON debugging (saving to files)
(function(console) {
   console.save = function(data, filename) {
      if (!data) {
         console.error('Console.save: No data');
         return;
      }
      if (!filename) {
         filename = "console.json";
      }
      if (typeof data === "object") {
         data = JSON.stringify(data, undefined, 4);
      }
      var blob = new Blob([data], {type:"text/json"});
      var e = document.createEvent("MouseEvents");
      var a = document.createElement("a");

      a.download = filename;
      a.href = window.URL.createObjectURL(blob);
      a.dataset.downloadurl = ["text/json", a.download, a.href].join(":");
      e.initMouseEvent("click", true, false, window, 0, 0, 0, 0, 0, false, false, false, false, 0, null);
      a.dispatchEvent(e);
   }
})(console);

然后称之为:

var some_json = {foo:2};
console.save(some_json,"newfile.json");

<强>更新

显然,HTML5文件系统API 被视为

2014年4月,在public-webapps上公布了Filesystem API规范应被视为已失效。

Link