我在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架构。
答案 0 :(得分:3)
您的代码看起来很好,除了一件事: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);
NB 在评论中注意到 Bergi ,您可以使用Object(v) === v
代替(typeof v === 'object') && (v !== null)
来检查v
是否为对象
您示例中的data
似乎是mongoose
文档。
mongoose
的问题在于它将所有对象包装在一大堆令人讨厌的getter和setter中,使它们看起来像普通的JS对象,而不是它们。
因此,如果您正在处理mongoose
个文档,则应在尝试对其执行任何操作之前致电.toObject()或.toJSON():
data = doc.toObject(); // converts doc to plain JS object
尽管如此,我的JSON.stringify
的第二个解决方案仍应有效,因为stringify
会自动调用.toJSON()
。
答案 1 :(得分:2)
for (var index in data) {
if (data[index] === null) {
data[index] = "null";
}
else if (data[index] === undefined) {
data[index] = "undefined";
}
else {
data[index] = data[index].toString();
}
}
答案 2 :(得分:1)
试试这个:
var val = null;
for(var key in data){
if(data.hasOwnProperty(key)){
val = data[key];
val = val === null ? 'null' : (val === undefined ? 'undefined' : val.toString());
data[key] = val;
}
}
它只是将null
转换为“null”,将undefined
转换为“undefined”
请注意,对象的值必须是基本数据类型才能使其生效。顺便说一下,这对你的例子很好。
答案 3 :(得分:0)
一个简单的
JSON.stringify(data);
应该有用。
做的时候
data[index].toString();
您在第三次运行时引用了null。 null没有这样的方法toString()。
答案 4 :(得分:0)
我以为我会回答一个与众不同的代码:
for(var x in data){
data[x] = ""+data[x]+"";
}
作品。