Mi salida JSON es similar a este objeto a continuación y tenemos una matriz de valores como se muestra a continuación
const object1 = { "sublists": { "item": [{ "line": "1", "amount": "1200.00", "id": "227", "item": "227", "item_display": "5800520002800", "quantity": "1" } ], "shipping": [{ "line": "1", "amount": "1200.00", "id": "227", "quantity": "1" } ] } }Estoy tratando de obtener el nombre de matrices y valores en variables separadas como se muestra a continuación
Nombre de la matriz: elemento, línea:, 1 Nombre de la matriz: elemento, cantidad: 1200 Nombre de la matriz: elemento, id: 227 y así sucesivamente ... las propiedades de la matriz pueden variar según la salida json, estoy buscando un script dinámico en el que Podría acceder al nombre y las propiedades de la matriz.
Alguien me puede ayudar en esto ?
La manera fácil de lograr el resultado deseado es pasar la 'clave principal' a la llamada recursiva:
const object1 = {sublists: {sales_order: [], data: [{"key1": "a", "value": 2 }, {"key1": "b", "value": 4 }], memo: [{"key1": "a", "value": 5 }] } }; function printValues(obj, parentName = null) { if (Object.prototype.toString.call(obj) === '[object Array]') { obj.forEach(o => console.log(`Array name: ${parentName}. Key1: ${o.key1}. Value: ${o.value}`)); } else { for (let k in obj) { printValues(obj[k], k); } } }; printValues(object1) ;if es para verificar si la variable es una matriz u objeto. Lógica tomada de: Array name: data. Key1: a. Value: 2 Array name: data. Key1: b. Value: 4 Array name: memo. Key1: a. Value: 5prueba esto
function iterateObject(obj, parent) { if (typeof obj == "object") if (!Array.isArray(obj)) Object.keys(obj).forEach((prop) => { if (typeof obj[prop] == "object") iterateObject(obj[prop], prop); else console.log(`Parent name : ${parent}, ${prop} : ${obj[prop]}`); }); else obj.forEach((elem) => { iterateObject(elem, parent); }); else console.log(`Parent name : ${parent}, ${parent} : ${obj}`); } iterateObject(object1,"sublists");ACTUALIZAR
este es el código para tu json en el comentario
iterateObject(object01,"item");Creo que esto resolverá tu problema. Seguí la naturaleza recursiva del código que proporcionó y lo adapté para asegurarme de que estaba dando el resultado que deseaba. Si tiene alguna pregunta, hágamelo saber e intentaré resolverla.
function printValues(obj) { for (const [objKey, objValue] of Object.entries( obj )) { if ( typeof objValue === 'object' && !objValue.length ) { printValues(objValue); } else if ( objValue !== undefined && objValue.length > 0 ) { for (let i = 0; i < objValue.length; i++) { const currentObject = objValue[i]; let str = ''; for (const [key, value] of Object.entries( currentObject )) { str += `Array name: ${objKey} , key1: ${key} , value: ${value}\n`; } console.log(str); } } } }