web-dev-qa-db-fra.com

Création d'un tableau JSON dans le nœud js

J'ai besoin de créer dans mon serveur écrit dans le noeud js une chaîne JSON à envoyer au client lorsque cela le demande. Le problème est que ce JSON dépend des données disponibles sur le serveur, donc la taille du tableau 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 comprends toujours pas.

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 tableau JSON que je veux créer dépend d'un hachage appelé "objectifs" où le nom d'un joueur est la clé et un certain nombre d'objectifs la valeur. Ainsi, s'il n'y a que 3 joueurs, seul le tableau JSON devrait 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 me bats vraiment avec ça :(

Edit: Im essayant maintenant avec stringy faire cela, mais pas de chance. Qu'est-ce que je fais mal?

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 hachage des objectifs est rempli à l'aide de GET:

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

});

11
Rafag

Créez une structure de données JavaScript avec les informations requises, puis transformez-la 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 du genre.

38
Chris Tavares

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

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

7
Quentin

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));
                        }
    });
3
Praneesh