将由mongoose返回的数据转换为json

我正在用routes / index.js打印我的整个集合

exports.create = function(req,res){ new checklist_model({ name : req.body.name, comment : req.body.comment }).save(function(err,checklist_model){ res.redirect('/'); }); }; exports.checklist = function ( req, res ){ checklist_model.find({},function ( err,checklist_data,count ){ res.render( 'checklist', { title : 'checklist', checklist_data : JSON.stringify(checklist_data) });console.log(checklist_data); }); }; 

我以下面的格式获取收集数据:

 { name: 'Stats', comment: 'Functionality test', _id: 53c5f7cdb79a40232193c45e, __v: 0 } 

我如何得到这个以JSON格式打印?

 { "name": "Stats", "comment": "Functionality test", "_id": "53c5f7cdb79a40232193c45e", "__v": "0" } 

谢谢

编辑:Soulcheck提出了一个很好的build议,将数据转换为JSON,它“工作”,但是当我尝试从checklist.jade中的代码(上面提到的在routes / index.js中)使用“checklist_data”没有任何事情发生。 (我想首先使用脚本标记,只是为了理解它是如何工作的)

 <script language="javascript" class="lookhere"> var myJason = JSON.parse(checklist_data); var result = myJason.row; console.log(result); for (var i = 0; i < result.length; i++) { var object = result[i]; for (property in object) { var value = object[property]; alert(property + "=" + value); } } </script> 

checklist.jade:

 | doctype html | html. head meta(charset='UTF-8') title Example of Twitter Bootstrap 3 Vertical Form Layout link(rel='stylesheet', href='http://maxcdn.bootstrapcdn.com/bootstrap/3.2.0/css/bootstrap.min.css') link(rel='stylesheet', href='http://maxcdn.bootstrapcdn.com/bootstrap/3.2.0/css/bootstrap-theme.min.css') script(src='http://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js') script(src='http://maxcdn.bootstrapcdn.com/bootstrap/3.2.0/js/bootstrap.min.js') style(type='text/css') .bs-example{ margin: 20px; } body form.bs-example(action='/create', method='post') .form-group label(for='name') input#name.form-control(type='text', placeholder='Enter Name', name='name') label(for='name') textarea.form-control(rows='3', name='comment') Enter Comments button.btn.btn-default(type='submit') Submit script.lookhere(language='javascript') var myJason = JSON.parse(checklist_data); var result = myJason.row; console.log(result); for (var i = 0; i < result.length; i++) { var object = result[i]; for (property in object) { var value = object[property]; alert(property + "=" + value); } } 

EDIT_2:

我的JSON填充如下所示

  var myJason = JSON.parse([{&quot;name&quot;:&quot;test&quot;,&quot;comment&quot;:&quot;testing&quot;,&quot;_id&quot;:&quot;53ceccae51f13e5f2d9003db&quot;,&quot;__v&quot;:0}]); 

我在这行之后得到错误。

 :3004/:25Uncaught SyntaxError: Unexpected token & 

什么似乎是你的问题是事实,你正在混合对象所代表的方式。

当你做console.log(data)你可能会得到:

 { name: 'Stats', comment: 'Functionality test', _id: 53c5f7cdb79a40232193c45e, __v: 0 } 

这是正确的 – console.log不会将对象序列化为JSON,而是将它们序列化为JavaScript对象文字(而不是数组,函数等的其他相关string)。

现在JSON.stringify(checklist_data)调用几乎肯定会给你想要的结果,那就是:

 { "name": "Stats", "comment": "Functionality test", "_id": "53c5f7cdb79a40232193c45e", "__v": "0" } 

现在如果你想打印实际的JSON,使用:

 console.log(JSON.stringify(checklist_data)); 

你几乎在你的代码中,但你调用console.log还没有序列化的对象。

编辑好看看你的代码,你最好不要从JSON反序列化。

所以在你的节点代码中:

  res.render( 'checklist', { title : 'checklist', checklist_data : Json.stringify(checklist_data) }) 

然后在你的玉模板中:

  script.lookhere(language='javascript') var myJason = !{checklist_data}; var result = myJason.row; console.log(result); for (var i = 0; i < result.length; i++) { .... 

请记住,JSON是一个有效的javascript对象文字。