如何将Javascript对象保存到文件中?

15

我需要将一个复杂的Javascript对象保存到文件中以备后续调查。该对象非常庞大,拥有50多个方法和属性。

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

我想要保存对象及其当前属性值,而不是HTML文档。文件的格式可以是HTML、JSON或其他任何格式。

如何保存该对象?


1
也许这篇关于在本地存储中进行对象序列化的讨论(https://dev59.com/5Ww15IYBdhLWcg3wntOh)会有所帮助。 - Fabrizio Calderan
4个回答

12

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

你可以像这样执行:JSON.stringify(my_big_javascript_object) 然后将生成的 JSON(纯文本)保存在文件中。

稍后,你可以使用某些 JSON 查看器,比如 http://jsonviewer.stack.hu/查看这些值。


1
好的,我的问题是:我在浏览器中,使用Firebug看到了对象,但我无法保存它。我可以使用GreaseMonkey将JavaScript放入原始页面中,但警告窗口对于JSON化的对象文本来说太小了,而且我无法从JavaScript中写入文件。 - János Továbbító
1
你在Javascript中没有0操作的限制,所以这是你最好的选择。我不明白为什么这对你不起作用。你可以从Firebug的控制台复制/粘贴JSON对象,然后使用jsonviewer.stack.hu。或者我理解错了?:s - alexandernst
是的,对不起,我想说的是“字符串化”的对象。 - alexandernst
嗨,我对这些工具没有经验 :( 我在firebug控制台中写了这个:JSON.stringify($I) 但结果是“{"$n":"$I"}”,我在DOM选项卡中看到了这个:link 我想用方法的名称和属性的值保存这个复杂对象 :) 我觉得我做错了什么,你说这是一件非常简单的事情,但对我来说不是 :( - János Továbbító
未捕获的类型错误:将循环结构转换为JSON - Jack

10

现在可以使用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();

该方法的结果将保存为文本文件,其中包含以下内容:

字符串 first = string

函数 second = function (){}


0
您可以使用 AJAX 将页面中的对象传递到服务器端脚本,例如 (jQuery):
var ajax_object // Your object    

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

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

// 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将对象保存到文件中,而不需要服务器端语言,那么恐怕是不可能的。


1
我不想使用JavaScript来保存,如果存在任何浏览器插件可以显示(像Firebug一样)和保存(Firebug不能),我会很高兴:)目前我没有任何服务端引擎:( - János Továbbító

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接