【问题标题】:How to save a Javascript object to file ?如何将 Javascript 对象保存到文件中?
【发布时间】:2012-09-26 08:14:24
【问题描述】:

我需要将一个复杂的 javascript 对象保存到一个文件中以供以后调查。 这是一个非常大的对象,有超过 50 个方法和属性。

我可以在 DOM 页面上的 Firefox-Firebug 中看到对象及其方法和属性(及其值),但我无法从那里将其保存到文件中。

我想用当前属性值保存对象,而不是 HTML 文档。 任何格式的文件 - HTML 或 JSON 或其他任何格式对我都有好处 :)

如何保存对象?

【问题讨论】:

标签: javascript


【解决方案1】:

嗯...你可以做一些事情,但我不能说有多丑。 你可以做类似的事情

JSON.stringify(my_big_javascript_object),然后将生成的 JSON(纯文本)保存在文件中。

您可以稍后使用一些 JSON 查看器查看这些值,例如 http://jsonviewer.stack.hu/

【讨论】:

  • 好的,我的问题是:我在浏览器中,我看到带有 Firebug 的对象,但我无法保存它。我可以使用 GreaseMonkey 将 javascript 放入原始页面,但是警报窗口对于 JSONed 对象文本来说太小了,我无法从 JavaScript 写入文件。
  • 好吧,你被限制在 Javascript 中没有 0 操作,所以你最好的选择是这个。我不明白为什么这对你不起作用。您可以从 Firebug 的控制台复制/粘贴 JSONed 对象,然后使用 jsonviewer.stack.hu 或者我弄错了? :s
  • 是的,对不起,我想说的是“字符串化”对象。
  • 嗨,我没有使用此工具的经验 :( 我写信给 firebug 控制台:JSON.stringify($I) 但结果是 "{"$n":"$I"}" 和我在 DOM 选项卡中看到了这个:link 我想用方法的名称和属性的值保存这个复杂的对象:) 我想我做错了,你说这是一件非常简单的事情,但不适合我:(
  • 未捕获的类型错误:将循环结构转换为 JSON
【解决方案2】:

现在可以使用 Blob API:

  function downloadObject(obj, filename){
    var blob = new Blob([JSON.stringify(obj, null, 2)], {type: "application/json;charset=utf-8"}).slice(2,-1);
    var url = URL.createObjectURL(blob);
    var elem = document.createElement("a");
    elem.href = url;
    elem.download = filename;
    document.body.appendChild(elem);
    elem.click();
    document.body.removeChild(elem);
  }

您可以在此处阅读更多信息:https://developer.mozilla.org/en-US/docs/Web/API/Blob

它要求您有一个带有实时 DOM 的网页,如果您正在调试页面上的 javascript,它应该可以工作。

【讨论】:

    【解决方案3】:

    这对我很有效。

    //Initialization of object to save
    var objectToSave={first:'string', second: function(){}};
    //Start of saving method
    var textToSave='';//String to be saved
    var count=0;
    for(var i in objectToSave){
    //Adding every key name + type + text value to string
    textToSave+=objectToSave[i].constructor.name+' '+ Object.keys(objectToSave)[count]+' = '+objectToSave[i]+'\n';
    count++;
    }
    //Saving string to file using html clicking trick
    var hiddenElement = document.createElement('a');
    hiddenElement.href = 'data:attachment/text,' + encodeURI(textToSave);
    hiddenElement.target = '_blank';
    hiddenElement.download = 'myFile.txt';
    hiddenElement.click();

    此方法的结果是保存带有文本的txt文件:

    字符串优先 = 字符串

    函数秒=函数(){}

    【讨论】:

      【解决方案4】:

      您可以使用 AJAX 将对象从您的页面传递到服务器端脚本,如下所示 (jQuery):

      var ajax_object // Your object    
      
      .ajax({
          type: "POST",
          url: "tofile.php",
          data: ajax_object,
      });
      

      然后使用服务器端脚本将其写入 HTML 文件(示例使用 PHP):

      // File: tofile.php
      
      $ajax_object // Object, which You have passed using AJAX
      
      ob_start();
      print_r("<pre>".print_r($ajax_object, true)."</pre>");
      $var = ob_get_contents();
      ob_end_clean();
      $fp = fopen('somefile.htm', 'w');
      fputs($fp, $var);
      fclose($fp);
      

      somefile.htm 中的输出类似于:

      Some_Object Object
      (
          [some_element] => 123
          [some_array] => Array
              (
                  [element1] => 456
                  [element2] => 789
                  [element3] => 012
              )
      )
      

      如果您想知道如何仅使用 Javascript 而不使用服务器端语言将您的对象保存到文件中,那么恐怕这是不可能的。

      【讨论】:

      • 我不想使用 JavaScript 来保存,如果存在任何可以显示(如 Firebug)和保存(Firebug 不能)对象的浏览器插件,我很满意 :) 和目前我没有任何服务端引擎:(
      猜你喜欢
      • 2013-12-27
      • 2011-05-17
      • 1970-01-01
      • 1970-01-01
      • 2011-01-26
      • 2011-04-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多