Node.js - Analyser simple objet JSON et l'accès des clés et des valeurs
Je suis nouveau sur le Nœud et de la difficulté à accéder à un simple objet JSON. Ma demande.corps aura le contenu JSON semblable à la suivante:
{
"store_config": [
{
"name": "hello",
"name2": "world"
}
]
}
La "store_config" valeur sera toujours présent, cependant, les clés et les valeurs à l'intérieur pourrait être n'importe quoi.
Comment puis-je faire une itération sur les clés et les valeurs de chacun? Je tiens également à traiter chacun de manière asynchrone.
Apprécier toute pensée ou de la direction.
Mise à JOUR
console.log(typeof(request.body));
Retourne: Object
parsedBody = JSON.parse(request.body);
retourne:
SyntaxError: Unexpected token o
at Object.parse (native)
Mise à JOUR 2 - Plus de débogage:
Quand j'essaie de parcourir le tableau, il n'y a qu'une seule valeur:
request.body.store_config.forEach(function(item, index) {
console.log(index);
console.log(request.body.store_config[index]);
});
retourne:
0
{ name: 'hello', name2: 'world' }
"je tiens également à traiter chacun de manière asynchrone." Euh... pourquoi?
Pour info, le nœud s'exécute dans le thread unique, de sorte que le asynchrones n'est pas la même que dans le multi-threading de programmation. Lorsque vous effectuez un appel asynchrone natif de la procédure asynchrone comme fs.*, il va enregistrer un gestionnaire d'événement pour l'événement-boucle d'attente de travail à faire. Dans d'autres cas, vous enregistrez simplement un gestionnaire d'événements à traiter.nextTick l'événement, qui aura de rappel à chaque tick, et votre code à exécuter en série pour ne pas en parallèle.
Pour info, le nœud s'exécute dans le thread unique, de sorte que le asynchrones n'est pas la même que dans le multi-threading de programmation. Lorsque vous effectuez un appel asynchrone natif de la procédure asynchrone comme fs.*, il va enregistrer un gestionnaire d'événement pour l'événement-boucle d'attente de travail à faire. Dans d'autres cas, vous enregistrez simplement un gestionnaire d'événements à traiter.nextTick l'événement, qui aura de rappel à chaque tick, et votre code à exécuter en série pour ne pas en parallèle.
OriginalL'auteur Ben | 2012-11-11
Vous devez vous connecter pour publier un commentaire.
Si
request.body
est déjà être analysée comme JSON, vous pouvez simplement accéder aux données comme un objet JavaScript; par exemple,Sinon, vous aurez besoin de l'analyser avec
JSON.parse
:Depuis
store_config
est un tableau, vous pouvez effectuer une itération sur:Si vous avez besoin de faire un traitement asynchrone sur chaque élément du tableau, et ont besoin de savoir quand c'est fait, je vous recommande de prendre un coup d'oeil à un async bibliothèque d'assistance comme async--en particulier,
async.forEach
peut être utile pour vous:J'ai parler un peu de traitement asynchrone avec le
async
bibliothèque dans ce screencast.Merci beaucoup. Comment puis-je confirmer ma demande.le corps est en train d'être analysée comme JSON déjà? Si j'ai sortie la store_config, c'est un objet:
console.log(typeof(request.body.store_config)); console.log(request.body.store_config);
object
[ { name: 'hello', name2: 'world' } ]
Si c'est "objet", alors il a été analysée--analyse transforme une chaîne de caractères dans un objet. (Si c'était une chaîne, en essayant de ne
request.body.store_config
donnerait une erreur.)Lorsque j'essaie de parcourir le tableau, il n'y a qu'une seule valeur:
request.body.store_config.forEach(function(item, index) { console.log(index); console.log(request.body.store_config[index]); });
retourne -0 { name: 'hello', name2: 'world' }
Qui semble correcte, que vous avez un produit dans votre exemple, un objet avec les deux propriétés
name
etname2
.OriginalL'auteur Michelle Tilley
Quelque chose comme ceci:
OriginalL'auteur Vyacheslav Voronchuk
Pour convertir cette piqûre à un objet, utilisez
JSON.parse
. Vous pouvez effectuer une itération si les objets Javascript comme vous le feriez avec un tableau.OriginalL'auteur Gant