Estoy tratando de convertir el objeto json en una matriz de cadena de ruta pero no obtengo el resultado esperado. No sé, podría haber otra forma de lograr lo mismo, pero intenté usar for loop y lodash isObject e isEmpty para validar el objeto como se muestra a continuación.
Entrada Json:
const json = { "info": { "account": {} }, "info2": { "address": { "mobile": { "phone": null } }, "contact": { "first": {} } } }codigo javascript:
var pathArray = this.convertJsonToArrayOfPathString(json); console.log(pathArray); convertJsonToArrayOfPathString(json, pathArray = [], path = '') { const keys = Object.keys(json); for (let i = 0; i < keys.length; i++) { const key = keys[i]; path = path ? path + '.' + key : key; if (_.isObject(json[key]) && !_.isEmpty(json[key])) { this.convertJsonToArrayOfPathString(json[key], pathArray, path); } else { pathArray.push(path) path = '' } } return pathArray; }Rendimiento esperado:
[ "info.account", "info2.address.mobile.phone", "info2.contact.first" ]¿podría usted por favor cualquier ayuda. Gracias.
const json = { "info": { "account": {} }, "info2": { "address": { "mobile": { "phone": null } }, "contact": { "first": {} } } }; var pathArray = convertJsonToArrayOfPathString(json); console.log(pathArray); function convertJsonToArrayOfPathString(json, pathArray = [], path = '') { const keys = Object.keys(json); for (let i = 0; i < keys.length; i++) { const key = keys[i]; const newPath = path ? path + '.' + key : key; const value = json[key]; if (typeof value === 'object' && !Array.isArray(value) && value !== null && Object.keys(value).length>0) { convertJsonToArrayOfPathString(json[key], pathArray, newPath); } else { pathArray.push(newPath); } } return pathArray; } const json = { "info": { "account": {} }, "info2": { "address": { "mobile": { "phone": null } }, "contact": { "first": {} } } } var pathArray = convertJsonToArrayOfPathString(json); console.log(pathArray); function convertJsonToArrayOfPathString(json, pathArray = [], path = '') { Object.keys(json).forEach( key => { const p = path ? path + '.' + key : key; var test = !json[key] || Object.keys( json[key]).length < 1 || Array.isArray( json[key]) || typeof json[key] !== 'object'; return test ? pathArray.push(p) : this.convertJsonToArrayOfPathString(json[key], pathArray, p); }); return pathArray; }