@carbon-io/mongodb-extended-json
Version:
MongoDB Extended JSON.
40 lines (37 loc) • 1.19 kB
JavaScript
var types = require('./types');
var deserialize = require('./deserialize');
/**
* Similar to [object_hook][object_hook] in python, ES5 JSON.parse accepts
* a very not well-known [reviver][reviver] argument. This can be used to
* easily plug in to existing middleware like [body-parser][body-parser]
* for express:
*
* ```javascript
* var EJSON = require('mongodb-extended-json'),
* bodyParser = require('body-parser'),
* app = require('express')();
*
* app.post('/save', bodyParser.json({reviver: EJSON.reviver}), function(req, res){
* console.log('omg now it has extended types', req.body);
* // Do stuff
* });
* ```
*
* [object_hook]: https://docs.python.org/2/library/json.html#json.load
* [reviver]: http://mdn.io/json.parse#Example.3A_Using_the_reviver_parameter
* [body-parser]: http://npm.im/body-parser
*
* @param {String} k - The key in the object.
* @param {Any} v - Contents of `k`.
* @return {Any}
*/
module.exports = function reviver(k, v) {
if (!types.isObject(v)) {
return v;
}
var firstKey = Object.keys(v)[0];
if (!firstKey || types.special.keys.indexOf(firstKey) === -1) {
return v;
}
return deserialize(v);
};