Node.js - Parse simple JSON object and access keys and values
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]);
}
}
Ben
Updated on July 09, 2022Comments
-
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 over 11 yearsThis only applies when using connect/express with bodyParser.
-
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 over 11 yearsIf 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 over 11 yearsWhen 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 over 11 years@Ben: That seems correct, as you have one item in your example -- one object with the two properties
name
andname2
. -
Michelle Tilley over 11 yearsIndeed. If you want to iterate over the object, check out the answer by @DamonGant (minuse the
JSON.parse
part). -
Ben over 11 yearsAh got it! Thanks so much all, really helpful. cc linus-g-thiel @brandon-tilley