56 lines
1.3 KiB
JavaScript
56 lines
1.3 KiB
JavaScript
|
var _ = require('lodash');
|
||
|
|
||
|
function jsonUtils() {}
|
||
|
|
||
|
/**
|
||
|
* Duplicate the source object and delete specified key(s) from the new object.
|
||
|
*
|
||
|
* @param {JSON} srcObj
|
||
|
* @param {String[]} keys
|
||
|
* @returns {Object} - A new object with key(s) removed
|
||
|
*/
|
||
|
jsonUtils.deleteProperties = function (srcObj, keys) {
|
||
|
var newObj = _.cloneDeep(srcObj);
|
||
|
jsonUtils.removeProps(newObj, keys);
|
||
|
return newObj;
|
||
|
};
|
||
|
|
||
|
/**
|
||
|
* Delete specified key(s) from the object.
|
||
|
*
|
||
|
* @param {JSON} obj
|
||
|
* @param {String[]} keys
|
||
|
*/
|
||
|
jsonUtils.removeProps = function (obj, keys) {
|
||
|
if (obj instanceof Array && obj[0] !== null) {
|
||
|
obj.forEach(function (item) {
|
||
|
jsonUtils.removeProps(item, keys);
|
||
|
});
|
||
|
} else if (typeof obj === 'object') {
|
||
|
Object.getOwnPropertyNames(obj).forEach(function (key) {
|
||
|
if (keys.indexOf(key) !== -1) {
|
||
|
delete obj[key]; // eslint-disable-line no-param-reassign
|
||
|
} else if (obj[key] != null) {
|
||
|
jsonUtils.removeProps(obj[key], keys);
|
||
|
}
|
||
|
});
|
||
|
}
|
||
|
};
|
||
|
|
||
|
/**
|
||
|
* Return pretty-print JSON string
|
||
|
*
|
||
|
* @param {JSON} obj
|
||
|
*/
|
||
|
jsonUtils.toPrettyString = function (obj) {
|
||
|
var prettyString;
|
||
|
|
||
|
if (obj) {
|
||
|
prettyString = JSON.stringify(obj, null, '\t');
|
||
|
}
|
||
|
|
||
|
return prettyString;
|
||
|
};
|
||
|
|
||
|
module.exports = jsonUtils;
|