迭代ejs部分中的JSON对象

我试图循环在“默认”,在我的JSON文件中的EJS部分内的每个条目。

{ "default": { "1": { "id": "alertmessages", "title": "Your Messages", "subtitle": "Tasks waiting for your attention", "image": "alert.png", }, "2": { "id": "uploadr", "title": "Upload", "subtitle": "Upload", "image": "baskets.png", }, etc............ } } 

我正在阅读这个JSON文件到我的node.js中,parsing它并使其可用于我的仪表板视图。 如下

 var jsondata = JSON.parse(require('fs').readFileSync('./app/routes/dashboard/buttons.json', 'utf8')); var content = { title: 'Dashboard', user: req.user, buttonsdata: jsondata }; res.render('dashboard', content); 

我的仪表板视图,包括一个ejs部分,我试图循环所有默认包含的对象(这个数字可能会有所不同)。 我想在没有Jquery的情况下这样做。 但无法得到我在其他线程find的任何build议。

 console.log("<%= buttonsdata.default.[1].id %>") 

给我什么我会期望,但是,如果我尝试和控制台日志buttons.length ,这是用在我看到的循环的例子,它只是空白。 我怎么能控制台login对象的全部内容来查看它的结构? 第三 – 这个对象,通过这种方式,我可以告诉可以通过ejs,但不是核心的JavaScript,我只能使用ejs <%%>标签访问它。 这是一个正确的理解?

       

网上收集的解决方案 "迭代ejs部分中的JSON对象"

  1. 你的json只包含对象,它没有任何数组,所以你将无法使用buttonsdata.length

  2. 显示整个对象 – 从控制器中显示对象,而不是模板。 看看这个答案 ,看看如何

  3. 这个对象是可以通过ejs – 是的,这是一个正确的理解 – 我认为通过核心JavaScript你的意思是在浏览器中执行的JavaScript。 整个ejs模板在后端进行处理。

使用普通的JavaScript你可以使用Object.keys :

 var obj = { "default": { "1": { "id": "alertmessages", "title": "Your Messages", "subtitle": "Tasks waiting for your attention", "image": "alert.png", }, "2": { "id": "uploadr", "title": "Upload", "subtitle": "Upload", "image": "baskets.png", } } }; Object.keys(obj.default).forEach(function(key) { console.log(obj.default[key].id); }); 

现在,根据你的代码,在视图中应该这样工作:

 <ul> <% Object.keys(buttonsdata.default).forEach(function(key) { %> <li><%= buttonsdata.default[key].id %></li> <% } %> </ul>