Home > Software design >  How to properly adjust Json file format in JavaScript?
How to properly adjust Json file format in JavaScript?

Time:06-17

I have a json in the below format that I transformed from a Python dataframe.

[{"sigla_uf": "AC", "ano": 2020, "mes": 1, "admitidos": 2939, "desligados": 2520, "saldo_movimentacao": 419}, 
{"sigla_uf": "AC", "ano": 2020, "mes": 2, "admitidos": 3147, "desligados": 2182, "saldo_movimentacao": 965}, 
{"sigla_uf": "AC", "ano": 2020, "mes": 3, "admitidos": 2874, "desligados": 2689, "saldo_movimentacao": 185},
{"sigla_uf": "RJ", "ano": 2020, "mes": 1, "admitidos": 2939, "desligados": 2520, "saldo_movimentacao": 419}, 
{"sigla_uf": "RJ", "ano": 2020, "mes": 2, "admitidos": 3147, "desligados": 2182, "saldo_movimentacao": 965}, 
{"sigla_uf": "RJ", "ano": 2020, "mes": 3, "admitidos": 2874, "desligados": 2689, "saldo_movimentacao": 185}]

I want it to be in this format in javascript, but I don't know how to do it correctly:

[{"AC":
  {"ano": [2020, 2020, 2020], 
  "mes": [1, 2, 3], 
  "admitidos": [2939, 3147, 2874], 
  "desligados": [2520, 2182, 2689], 
  "saldo_movimentacao": [419, 965, 185]},
{"RJ":
  {"ano": [2020, 2020, 2020], 
  "mes": [1, 2, 3], 
  "admitidos": [2939, 3147, 2874], 
  "desligados": [2520, 2182, 2689], 
  "saldo_movimentacao": [419, 965, 185]}}
}]

CodePudding user response:

I hope this can help you.

const test = [
  {
    sigla_uf: "AC",
    ano: 2020,
    mes: 1,
    admitidos: 2939,
    desligados: 2520,
    saldo_movimentacao: 419,
  },
  {
    sigla_uf: "AC",
    ano: 2020,
    mes: 2,
    admitidos: 3147,
    desligados: 2182,
    saldo_movimentacao: 965,
  },
  {
    sigla_uf: "AC",
    ano: 2020,
    mes: 3,
    admitidos: 2874,
    desligados: 2689,
    saldo_movimentacao: 185,
  },
  {
    sigla_uf: "RJ",
    ano: 2020,
    mes: 1,
    admitidos: 2939,
    desligados: 2520,
    saldo_movimentacao: 419,
  },
  {
    sigla_uf: "RJ",
    ano: 2020,
    mes: 2,
    admitidos: 3147,
    desligados: 2182,
    saldo_movimentacao: 965,
  },
  {
    sigla_uf: "RJ",
    ano: 2020,
    mes: 3,
    admitidos: 2874,
    desligados: 2689,
    saldo_movimentacao: 185,
  },
];

const format = (arr) => {
  const result = {};
  arr.forEach((val) => {
    const { sigla_uf, ...rest } = val;
    const keys = Object.keys(rest);
    let res = {};
    if (result[sigla_uf]) {
      res = result[sigla_uf];
    }
    keys.forEach((key) => {
      if (!res[key]) {
        res[key] = [rest[key]];
      } else {
        res[key] = res[key].concat(rest[key]);
      }
    });
    result[sigla_uf] = {
      ...res,
    };
  });
  return Object.keys(result).map((key) => ({ [key]: result[key] }));
};
const res = format(test);

console.log("res", res);

CodePudding user response:

let acList = { ano: [],  mes: [],  admitidos: [],  desligados: [],  saldo_movimentacao: [] };
    let rjList = { ano: [],  mes: [],  admitidos: [],  desligados: [],  saldo_movimentacao: [] };
    
    let data = [
        { sigla_uf: "AC", ano: 2020, mes: 1, admitidos: 2939, desligados: 2520, saldo_movimentacao: 419 }, 
        { sigla_uf: "AC", ano: 2020, mes: 2, admitidos: 3147, desligados: 2182, saldo_movimentacao: 965 },
        { sigla_uf: "AC", ano: 2020, mes: 3, admitidos: 2874, desligados: 2689, saldo_movimentacao: 185 },
        { sigla_uf: "RJ", ano: 2020, mes: 1, admitidos: 2939, desligados: 2520, saldo_movimentacao: 419 }, 
        { sigla_uf: "RJ", ano: 2020, mes: 2, admitidos: 3147, desligados: 2182, saldo_movimentacao: 965 }, 
        { sigla_uf: "RJ", ano: 2020, mes: 3, admitidos: 2874, desligados: 2689, saldo_movimentacao: 185 }
    ];
    
    data.forEach(({ sigla_uf, ano, mes, admitidos, desligados, saldo_movimentacao }) => {
        if(sigla_uf === "AC") {
            acList.ano = [ ...acList.ano, ano];
            acList.mes = [ ...acList.mes, mes];
            acList.admitidos = [ ...acList.admitidos, admitidos];
            rjList.desligados = [ ...rjList.desligados, desligados];
            acList.saldo_movimentacao = [ ...acList.saldo_movimentacao, saldo_movimentacao];
        } else {
            rjList.ano = [ ...rjList.ano, ano];
            rjList.mes = [ ...rjList.mes, mes];
            rjList.admitidos = [ ...rjList.admitidos, admitidos];
            rjList.desligados = [ ...rjList.desligados, desligados];
            rjList.saldo_movimentacao = [ ...rjList.saldo_movimentacao, saldo_movimentacao];
        }
    });
    
    // shape it however you like :)
    let result = [{ acList, rjList }]
    console.log(result);
  • Related