如何在jade中呈现json对象并通过结果循环

当我发送一个JSONstring到一个玉文件的时候,我只能打印出整个string,而不是它的元素。 如何打印出特定的元素或通过JSONstring循环?

app.js:

var http = require('http'), express = require('express'), net = require('net'); var app = express(); app.set('views', __dirname + '/views'); app.set('view engine', 'jade'); app.use(express.logger('dev')); app.use(express.static(__dirname + '/public')); app.get('/', function (req, res) { var json_string = {"action":"date +%s","result":"1367263074"}; res.render('index', { layout : 'layout', json: JSON.stringify(json_string) }); }) app.listen(3000); 

layout.jade:

 !!!5 html head body p !{json} p !{json.result} p --- each val, key in json p #{key}: #{val} 

预期产出:

 {"action":"date +%s","result":"1367263074"} 1367263074 --- action: date +%s result: 1367263074 

实际产量:

 {"action":"date +%s","result":"1367263074"} --- 0: { 1: " 2: a 3: c 4: t 5: i 6: o 7: n 8: " 9: : 10: " 11: d 12: a 13: t 14: e 15: 16: + 17: % 18: s 19: " 20: , 21: " 22: r 23: e 24: s 25: u 26: l 27: t 28: " 29: : 30: " 31: 1 32: 3 33: 6 34: 7 35: 2 36: 6 37: 3 38: 0 39: 7 40: 4 41: " 42: } 

       

网上收集的解决方案 "如何在jade中呈现json对象并通过结果循环"

为什么你传递一个string? 尝试这个:

 var ob = { action:"date +%s", result:"1367263074"}; res.render('index', { layout : 'layout', json: ob }); 

或者这样做:

 -var ob = JSON.parse(json) -for(var prop in ob) p #{prop}: #{ob[prop]} 

在这一行: each val, key in json您首先将您的JS Object(服务器端)string化,不要将其string化为对象。

所以这一行:

 res.render('index', { layout : 'layout', json: JSON.stringify(json_string) }); 

 res.render('index', { layout : 'layout', json: json_string }); 

如果你正在寻找循环的动作和结果数组,然后使用Mathieu Amiot的build议加上这段代码:

 each key in json p !{key.action} !{key.result}