Tengo el JSON, consulte a continuación y necesito ayuda para convertir y cambiar el formato que se menciona a continuación. Quiero mover los datos a diferentes columnas (formato mencionado a continuación)
JSON tengo
const data = [ { "2":{ "value":1.2 }, "3":{ "values":{ "10.0":1.3 } }, "4":{ "value":1.6 }, "key":"abc", "count":2 }, { "2":{ "value":2.2 }, "3":{ "values":{ "10.0":1.2 } }, "4":{ "value":5.6 }, "key":"xyz", "count":22 }, ]Quiero cambiar lo anterior al siguiente formato:
formato esperado
const data = [ { col1: "1.2", col2: "1.3", col3: "1.6", col4: "abc", col5: "2" }, { col1: "2.2", col2: "1.2", col3: "5.6", col4: "xyz", col5: "22" }, ]Creo que esto es lo que estás buscando.
Asumí que solo hay propiedades de value o values y en values solo necesitas la primera. Si mi suposición es correcta, aquí está su fragmento a continuación.
const data = [ { '2': { value: 1.2, }, '3': { values: { '10.0': 1.3, }, }, '4': { value: 1.6, }, }, { '2': { value: 2.2, }, '3': { values: { '10.0': 1.2, }, }, '4': { value: 5.6, }, }, ]; const result = data.map((item) => { return Object.values(item) .reduce((acc, { value = null, values = null }, index) => { if (value) return { ...acc, [`col${index + 1}`]: String(value) }; if (values) { const [firstItem = null] = Object.values(values); if (firstItem) return { ...acc, [`col${index + 1}`]: String(firstItem) }; } }, {}); }); console.log(result);Aquí hay una solución que aplana las entradas json arbitrariamente anidadas, asumiendo solo que cada columna tiene solo un valor primitivo. Aprovecha el hecho de que las matrices en js son realmente solo objetos con claves numéricas.
const data = [ { '2': { value: 1.2, }, '3': { values: { '10.0': 1.3, }, }, '4': { value: 1.6, }, }, { '2': { value: 2.2, }, '3': { values: { '10.0': 1.2, }, }, '4': { value: 5.6, }, }, ]; const flattenedValue = value => { while (typeof value == 'object' && value != null) for (const v of Object.values(value)) value = v; return value; }; const result = data.map(row => Object.fromEntries( Object.values(row).map(flattenedValue).map((v, i) => [`col${i + 1}`, v]) ) ); console.log(result);