我明白了如何将对象写入文件,如下所述:How can I save objects to files in Node.js?。但是,有没有一种方法可以获取对象并以允许我将对象重新加载到内存中的方式将其写入内存?
发布于 2012-06-30 17:42:45
正如@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))
发布于 2014-06-22 05:58:17
这个问题由来已久,但我在任何地方都找不到简单的解决方案来解决JavaScript中的有效序列化问题。
可以使用BSON (MongoDB内部对象表示),它使用二进制格式来表示内存中的对象。
我找不到文档的链接,但code is well documented和我想出了这样的东西:
fs = require 'fs'
bson = require('bson').BSONPure.BSON
obj = {
string: "test",
func: (s) ->
console.log s
}
fs.writeFile 'test.txt', bson.serialize(obj, false, false, true), (err) ->
return console.log("Err : #{err}") if err
fs.readFile 'test.txt', (err, file) ->
return console.log("Err : #{err}") if err
deserialized = bson.deserialize file, evalFunctions: true
deserialized.func deserialized.string // Outputs 'text', as expected
它是coffee-script,但代码很简单,每个人都能理解。
发布于 2012-06-30 18:01:22
我最近编写了shoveJS:https://shovemedia.github.io/shovejs/来处理这类事情。YMMV --我还没有在Node上尝试过。
它将类型化的对象结构转换为JSON (然后将其保存到磁盘),并可以将该结构膨胀回类型化的对象,包括适当的对象->对象引用等。系统只是期望在序列化期间可用的已注册的Model / Factory类在反序列化期间也可用。
提前为没有张贴一些简单的例子而道歉。
编辑:这项技术是对Rob W在下面的评论中提到的内容的增强
https://stackoverflow.com/questions/11275732
复制相似问题