【发布时间】:2012-02-13 10:49:59
【问题描述】:
我正在为某个项目尝试“mongo-ruby-driver”。它工作正常,除非我在 mongo 对象上调用 to_json 。它提供了格式良好的 json,但它没有将 BSON::Code 转换为可读值,从而生成 JSON。
它不显示代码文本,而是显示类似
#<BSON::Code:0x00000100af6fa8>
有人试过吗?非常感谢任何帮助 ID。
更新
这里是一些代码sn-p:
@records 是包含 MongoDB 文档数组的变量。
@records.to_json
当我调用 to_json 时,它会按预期提供一切。除了包含 BSON::Code 的键(表示 javascript 代码)。例如考虑以下文档:
{
"_id" : "contains",
"value" : function( obj, target ) { return obj.indexOf(target) != -1; };
}
从 ruby 查询相同的文档会得到如下输出:
{
"_id"=>"contains",
"value"=><BSON::Code:2160165280 @data="function( obj, target ) { return obj.indexOf(target) != -1; };" @scope="{}">
}
并为此调用 to_json 会得到以下结果:
{"_id":"contains","value":"#<BSON::Code:0x00000100b54658>"}
这就是问题所在。我没有获取“值”键的实际代码,而是将 ruby 对象作为字符串。
在 BSON::Code 上调用 code 方法我们可以将其转换为代码。但为此我需要循环 mongo 文档,检查每个键的值,如果它是 BSON::Code 的对象,则在其上调用代码,然后将其分配回键。最后我们可以调用 to_json 。但我不想要这么多开销。我需要 to_json 自己来处理它。
【问题讨论】:
-
你能用你的代码更新答案吗?
-
是的,我用代码更新了问题。