我现在最终使用的解决方案是markIntegers
对从返回的数据调用一个函数JSON.parse
;它似乎工作正常。为了完整起见,我将其发布在这里;非常欢迎更好的解决方案和更正!
function markIntegers(obj) {
if (obj instanceof Array) {
return obj.map(function(x) { return markIntegers(x); });
// make sure it's a plain object and not Date or BinData etc
} if (obj !== null && typeof obj === "object" && obj.constructor === Object) {
var ret = {}
for (var key in obj)
ret[key] = markIntegers(obj[key]);
return ret;
} else if (typeof obj === "number") {
return obj === Math.floor(obj) ? NumberLong(obj) : obj;
} else {
return obj;
}
}
像这样工作:
> markIntegers({a: {b: 3}, c: 4.4, e: ["hello"]})
{ "a" : { "b" : NumberLong(3) }, "c" : 4.4, "e" : [ "hello" ] }