Node.js - Parse simple JSON object and access keys and values

61,983

Solution 1

If request.body is already being parsed as JSON, you can just access the data as a JavaScript object; for example,

request.body.store_config

Otherwise, you'll need to parse it with JSON.parse:

parsedBody = JSON.parse(request.body);

Since store_config is an array, you can iterate over it:

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`
});

If you need to do asynchronous processing on each item in the array, and need to know when it's done, I recommend you take a look at an async helper library like async--in particular, async.forEach may be useful for you:

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

I talk a little bit about asynchronous processing with the async library in this screencast.

Solution 2

Something like this:

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]);
   }
}
Share:
61,983
Ben
Author by

Ben

Updated on July 09, 2022

Comments

  • Ben
    Ben almost 2 years

    I am new to Node and struggling to access a simple JSON object. My request.body will have JSON content similar to the following:

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

    The "store_config" value will always be present, however the keys and values within could be anything.

    How can I iterate through the keys and values to access each? I would also like to process each in an asynchronous manner.

    Appreciate any thoughts or direction.


    UPDATE

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

    Returns: Object

    parsedBody = JSON.parse(request.body);
    

    returns:

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

    UPDATE 2 - Further debug:

    When I try to iterate through the array, there is only a single value:

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

    returns:

    0
    { name: 'hello', name2: 'world' }
    
  • Aurelia
    Aurelia over 11 years
    This only applies when using connect/express with bodyParser.
  • Ben
    Ben over 11 years
    @brandon-tilley Many thanks. How can I confirm if my request.body is being parsed as JSON already? If I output the store_config, it is an object: console.log(typeof(request.body.store_config)); console.log(request.body.store_config); object [ { name: 'hello', name2: 'world' } ]
  • Michelle Tilley
    Michelle Tilley over 11 years
    If it's "object," then it has been parsed--parsing turns a string into an object. (If it was a string, trying to do request.body.store_config would give an error.)
  • Ben
    Ben over 11 years
    When I try to iterate through the array, there is only a single value: request.body.store_config.forEach(function(item, index) { console.log(index); console.log(request.body.store_config[index]); }); returns - 0 { name: 'hello', name2: 'world' }
  • Linus Thiel
    Linus Thiel over 11 years
    @Ben: That seems correct, as you have one item in your example -- one object with the two properties name and name2.
  • Michelle Tilley
    Michelle Tilley over 11 years
    Indeed. If you want to iterate over the object, check out the answer by @DamonGant (minuse the JSON.parse part).
  • Ben
    Ben over 11 years
    Ah got it! Thanks so much all, really helpful. cc linus-g-thiel @brandon-tilley