首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >在nodejs中将js对象写入文件(包括方法)?

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

Stack Overflow用户
提问于 2012-07-01 00:29:57
回答 3查看 7.4K关注 0票数 9

我明白了如何将对象写入文件,如下所述:How can I save objects to files in Node.js?。但是,有没有一种方法可以获取对象并以允许我将对象重新加载到内存中的方式将其写入内存?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2012-07-01 01:42:45

正如@AnthonySottile之前所说,这可能是非常危险的,我不确定有没有一个好的用例,但为了好玩,你需要编写你自己的递归序列化程序。如下所示:

代码语言:javascript
运行
复制
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();
}

这可以处理大多数类型,但总会有奇怪的事情弄乱它,所以我不会在生产中使用它。然后反序列化就像下面这样简单:

代码语言:javascript
运行
复制
eval('var test = ' + dump_to_string(obj))
票数 7
EN

Stack Overflow用户

发布于 2014-06-22 13:58:17

这个问题由来已久,但我在任何地方都找不到简单的解决方案来解决JavaScript中的有效序列化问题。

可以使用BSON (MongoDB内部对象表示),它使用二进制格式来表示内存中的对象。

我找不到文档的链接,但code is well documented和我想出了这样的东西:

代码语言:javascript
运行
复制
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,但代码很简单,每个人都能理解。

票数 2
EN

Stack Overflow用户

发布于 2012-07-01 02:01:22

我最近编写了shoveJS:https://shovemedia.github.io/shovejs/来处理这类事情。YMMV --我还没有在Node上尝试过。

它将类型化的对象结构转换为JSON (然后将其保存到磁盘),并可以将该结构膨胀回类型化的对象,包括适当的对象->对象引用等。系统只是期望在序列化期间可用的已注册的Model / Factory类在反序列化期间也可用。

提前为没有张贴一些简单的例子而道歉。

编辑:这项技术是对Rob W在下面的评论中提到的内容的增强

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/11275732

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档