我在node.js中有一个像这样的对象(json):
var data = {
string : "name",
number : 123456789 ,
n : null ,
bool : false ,
bool2 : true
};
但我需要将其转换为这样的内容:
{
string : "name",
number : "123456789" ,
n : "null" ,
bool : "false" ,
bool2 : "true"
};
我使用了这个代码,但不起作用。
for ( var index in data ){
data[index] = data[index].toString();
};
// or this
data.toString();
如何修复它?
更新
此数据对象被创建为新的 Mongoose 模式。
最佳答案
您的代码看起来不错,除了一件事:null
没有 .toString()
方法。因此,最好使用 String
代替:
for ( var key in data ){
data[key] = String(data[key]);
};
String
是一个字符串构造函数。它接受任何内容并生成它的字符串表示形式。
更新
但是这个解决方案不适用于复杂的数据结构。不过,如果您需要 JSON 字符串,那么您可以使用 JSON.stringify与棘手的replacer :
function replaceWithString(k, v) {
if ((typeof v === 'object') && (v !== null)) {
return v;
} else {
return String(v);
}
}
JSON.stringify(data, replaceWithString);
如果你想让它变得漂亮:
JSON.stringify(data, replaceWithString, 2);
注意 正如 Bergi 在评论中注意到的,您可以使用 Object(v) === v
而不是 (typeof v === 'object') && (v !== null)
来检查 v
是否是一个对象。
更新2
看起来您的示例中的data
是一个mongoose
文档。
mongoose 的问题在于,它用一整套令人讨厌的 getter 和 setter 来包装所有对象,使它们看起来像普通的 JS 对象,但事实并非如此。
因此,如果您正在使用 mongoose
文档,您应该调用 .toObject()或.toJSON()在尝试用它做任何事情之前:
data = doc.toObject(); // converts doc to plain JS object
尽管如此,我使用 JSON.stringify
的第二个解决方案应该可以工作,因为 stringify
自动调用 .toJSON()
。
关于javascript - toString 所有对象数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25249283/