javascript - toString 所有对象数据

标签 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 模式。

最佳答案

您的代码看起来不错,除了一件事: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/

相关文章:

javascript - 用户完成拖动元素后定位 div

javascript - 使用 $http.post 和 resangular post 时出现 SyntaxError : Unexpected token F,

c# - 将 json 序列化为对象 C#

json - 如何高效存储JSON?

node.js - AbortError : Ready check failed: Redis connection lost and command aborted. 可能已经处理完毕

javascript - 根据列高亮显示不同颜色的表格行

javascript - 如何画 donut ?

java - 当用户单击微调器中的一项时,它应该显示另一项数据将从 JSON Web 服务获取

jquery - 如何使用 Node js将消息从Web服务器推送到浏览器

node.js - 如何将mean.js部署到生产环境?