14

レンダリングのためにJSON文字列をjadeファイルに送信すると、文字列全体を印刷することしかできず、要素ごとには印刷できません。特定の要素を出力したり、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);

レイアウト.ジェイド:

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

3 に答える 3

18

なぜ文字列を渡すのですか?これを試して:

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]}
于 2013-04-30T13:40:55.057 に答える
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 });
于 2013-04-30T13:41:08.243 に答える
2

アクションと結果の配列をループする場合は、Mathieu Amiot の提案と次のコードを使用します。

each key in json   
    p !{key.action} !{key.result}
于 2015-07-05T16:45:44.847 に答える