I have the JSON please see below and I need help to convert changing the format mentioned below. I want to move the data to different columns (format mentioned below)
JSON I have
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 }, ]
I want to change the above to the below format:
Expected format
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" }, ]
Advertisement
Answer
Here’s a solution that flattens arbitrarily nested json inputs, assuming only that each column has only one primitive value. It takes advantage of the fact that arrays in js are really just objects with numeric keys.
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);