一尘不染

在nodejs中将js对象写入文件(包括方法)?

node.js

我看到如何将对象写入文件,如下所述:如何将对象保存到Node.js中的文件?但是有没有办法获取一个对象并以一种允许我将该对象重新加载到包括其方法的内存中的方式写入它?


阅读 952

收藏
2020-07-07

共1个答案

一尘不染

就像@AnthonySottile之前说的那样,这可能非常危险,我不确定是否有很好的用例,但是对于踢和傻笑,您需要编写自己的递归序列化器。像这样:

var toString = Object.prototype.toString;

function dump_object(obj) {
    var buff, prop;
    buff = [];
    for (prop in obj) {
        buff.push(dump_to_string(prop) + ': ' + dump_to_string(obj[prop]))
    }
    return '{' + buff.join(', ') + '}';
}

function dump_array(arr) {
    var buff, i, len;
    buff = [];
    for (i=0, len=arr.length; i<len; i++) {
        buff.push(dump_to_string(arr[i]));
    }
    return '[' + buff.join(', ') + ']';
}

function dump_to_string(obj) {
    if (toString.call(obj) == '[object Function]') {
        return obj.toString();
    } else if (toString.call(obj) == '[object Array]') {
        return dump_array(obj);
    } else if (toString.call(obj) == '[object String]') {
        return '"' + obj.replace('"', '\\"') + '"';
    } else if (obj === Object(obj)) {
        return dump_object(obj);
    }
    return obj.toString();
}

这将处理大多数类型,但是总是有一个奇怪的问题将其弄乱的机会,因此 我不会在生产中使用它 。之后,反序列化就像下面这样简单:

eval('var test = ' + dump_to_string(obj))
2020-07-07