Ich bin neu bei Node und habe Probleme, auf ein einfaches JSON-Objekt zuzugreifen. Meine request.body wird JSON-Inhalte haben, die den folgenden ähnlich sind:

{
    "store_config": [
        {
            "name": "hello",
            "name2": "world"
        }
    ]
}

Der Wert "store_config" ist immer vorhanden, die darin enthaltenen Schlüssel und Werte können jedoch beliebig sein.

Wie kann ich die Schlüssel und Werte durchlaufen, um auf sie zuzugreifen? Ich möchte auch jedes asynchron verarbeiten.

Schätzen Sie alle Gedanken oder Richtungen.


AKTUALISIEREN

console.log(typeof(request.body));

Rückgabe: Object

parsedBody = JSON.parse(request.body);

Kehrt zurück:

SyntaxError: Unexpected token o
    at Object.parse (native)

UPDATE 2 - Weiteres Debuggen:

Wenn ich versuche, das Array zu durchlaufen, gibt es nur einen einzigen Wert:

request.body.store_config.forEach(function(item, index) {
  console.log(index);
  console.log(request.body.store_config[index]);

});

Kehrt zurück:

0
{ name: 'hello', name2: 'world' }
10
Ben 11 Nov. 2012 im 22:02

3 Antworten

Beste Antwort

Wenn request.body bereits als JSON analysiert wird, können Sie einfach als JavaScript-Objekt auf die Daten zugreifen. beispielsweise,

request.body.store_config

Andernfalls müssen Sie es mit JSON.parse analysieren:

parsedBody = JSON.parse(request.body);

Da store_config ein Array ist, können Sie darüber iterieren:

request.body.store_config.forEach(function(item, index) {
  // `item` is the next item in the array
  // `index` is the numeric position in the array, e.g. `array[index] == item`
});

Wenn Sie für jedes Element im Array eine asynchrone Verarbeitung durchführen müssen und wissen möchten, wann dies erledigt ist, empfehlen wir Ihnen, sich eine asynchrone Hilfsbibliothek anzusehen. wie asynchron - insbesondere async.forEach kann nützlich sein für Sie:

async.forEach(request.body.store_config, function(item, callback) {
  someAsyncFunction(item, callback);
}, function(err){
  // if any of the async callbacks produced an error, err would equal that error
});

Ich spreche ein wenig über asynchrone Verarbeitung mit der async - Bibliothek in diesem Screencast.

16
Michelle Tilley 11 Nov. 2012 im 18:08

Etwas wie das:

config = JSON.parse(jsonString);
for(var i = 0; i < config.store_config.length; ++i) {
   for(key in config.store_config[i]) {
      yourAsyncFunction.call(this, key, config.store_config[i][key]);
   }
}
2
Lucas Azevedo 9 Nov. 2015 im 20:29

Verwenden Sie JSON.parse, um diesen Stich in ein tatsächliches Objekt umzuwandeln. Sie können Javascript-Objekte wie mit einem Array durchlaufen.

config = JSON.parse(string).store_config[0]
foreach (var key in config) {
    value = config[key]
}
-1
Aurelia 11 Nov. 2012 im 18:09