Lorsque j'envoie une chaîne JSON à un fichier jade pour déchiffrer, je ne peux qu'imprimer la chaîne dans sa totalité, mais pas par ses éléments. Comment imprimer des éléments spécifiques ou faire une boucle dans 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
entrez each val, key in json
Vous avez stringé votre objet JS en premier (côté serveur), ne le modifiez pas pour l'obtenir comme 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 à boucler un éventail d'actions et de résultats, utilisez la suggestion de Mathieu Amiot plus ce code:
each key in json p !{key.action} !{key.result}