2013-04-30 88 views
14

渲染JSON对象在玉和循环当我发送一个JSON字符串到玉文件撕心裂肺,我只能够通过它的元素打印出字符串在它的全部,但不是。如何打印出特定元素或通过JSON字符串循环?如何通过结果

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: } 

回答

16

你为什么要传递一个字符串?试试这个:

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]} 
7

在此行中:each val, key in json 你先字符串化你的JS对象(服务器端),不字符串化是把它作为目标。

所以这行:

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

成为

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

如果您正在寻找遍历的行为和结果的数组,然后使用马修阿米奥特的建议,加上这段代码:

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