toString所有对象数据

时间:2014-08-11 17:43:12

标签: javascript json node.js mongoose

我在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架构。

5 个答案:

答案 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是否为对象

UPDATE2

您示例中的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]+"";
}

作品。