Lorsque j'envoie une chaîne JSON à un fichier jade pour le rendu, je ne peux imprimer la chaîne que dans son intégralité, mais pas par ses éléments. Comment imprimer des éléments spécifiques ou parcourir la chaîne 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}
production attendue:
{"action":"date +%s","result":"1367263074"}
1367263074
---
action: date +%s
result: 1367263074
sortie réelle:
{"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: }
Pourquoi passez-vous une chaîne? Essaye ça:
var ob = { action:"date +%s", result:"1367263074"};
res.render('index', { layout : 'layout', json: ob });
Ou faites ceci:
-var ob = JSON.parse(json)
-for(var prop in ob)
p #{prop}: #{ob[prop]}
Sur cette ligne: each val, key in json
Vous avez d'abord stratifié votre objet JS (côté serveur), ne le strifiez pas pour l'obtenir en tant qu'objet.
Donc cette ligne:
res.render('index', { layout : 'layout', json: JSON.stringify(json_string) });
devient
res.render('index', { layout : 'layout', json: json_string });
Si vous cherchez à parcourir un tableau d'actions et de résultats, utilisez la suggestion de Mathieu Amiot plus ce code:
each key in json
p !{key.action} !{key.result}