Création d'une matrice JSON dans le nœud js

J'ai besoin de créer dans mon serveur écrit dans le nœud js une chaîne JSON à envoyer au client lors de sa demande. Le problème est que ce JSON dépend des données disponibles dans le serveur, donc la taille de la matrice JSON n'est pas toujours la même. J'ai essayé toute la journée, mais même si je me sens proche, je ne l'ai pas encore.

Un exemple de requête suit:

json={"players":[ {"name":"Messi", "goals":8}, {"name":"Ronaldo", "goals":22}, {"name":"Costa", "goals":20}, {"name":"Neymar", "goals":13}, {"name":"Arabi", "goals":6}, {"name":"Bale", "goals":3}, {"name":"Toquero", "goals":0}]}; 

Je l'enverrais au serveur par:

 res.contentType('application/json'); res.send(json); 

Le réseau JSON que je veux le créer dépend d'un hash appelé «objectifs» où un nom de joueur est la clé et un certain nombre de buts la valeur. Ainsi, s'il n'y a que 3 joueurs, le JSON Array devrait seulement avoir cette taille.

J'ai essayé de créer le tableau JSON en ligne comme ceci:

 result= ""; for(i in goals){ result = result+ '{ name:' + i + ", goals:" + goals[i] + '},'; } result= result.substring(0, result.length - 1); res.contentType('application/json'); res.send( { 'players': [ result]}); 

Cependant, le client ne reçoit qu'un json de taille 1

 Object {jugadores: Array[1]} 

Jugadores: Array [1] 0: "{nombre: Messi, goles: 8}, {nombre: Ronaldo, goles: 16}, {nombre: Costa, goles: 10}, {nombre: Toquero, goles: 0}, { Nombre: Arabi, goles: 2}, {nombre: Bale, goles: 10}, {nombre: Neymar, goles: 8} "longueur: 1

Merci d'avance, je suis vraiment en difficulté avec ceci 🙁

Edit: Im essayant maintenant avec stringy faisant cela, mais pas de chance. Que dois-je faire de faux?

 result= "players:["; for(i in goals){ result= result+ '{ name:' + i + ", goals:" + goals[i] + '},'; } result= result.substring(0, resultado.length - 1); result= result + ']' res.contentType('application/json'); myJSONstring = JSON.stringify(resultado); res.send(myJSONstring); 

Le hash des objectifs est rempli en utilisant GET:

 app.get('/player/:id', function (req, res) { res.contentType('application/json'); res.send( {'goals': + goals[req.params.id] } ); 

});

Créez une structure de données JavaScript avec les informations requises, puis la transformer en chaîne json à la fin.

Sur la base de ce que je pense que vous faites, essayez quelque chose comme ceci:

 var result = []; for (var name in goals) { if (goals.hasOwnProperty(name)) { result.push({name: name, goals: goals[name]}); } } res.contentType('application/json'); res.send(JSON.stringify(result)); 

Ou quelque chose de ce genre.

Vous n'avez pas JSON. Vous disposez d'une structure de données JavaScript constituée d'objets, d'un tableau, de certaines chaînes et de certains nombres.

Utilisez JSON.stringify(object) pour le transformer en (une chaîne de) texte JSON.

Celui-ci m'a aidé,

 res.format({ json:function(){ var responseData = {}; responseData['status'] = 200; responseData['outputPath'] = outputDirectoryPath; responseData['sourcePath'] = url; responseData['message'] = 'Scraping of requested resource initiated.'; responseData['logfile'] = logFileName; res.json(JSON.stringify(responseData)); } });