Convert JSON to Object with different structure

1

How can I convert this JSON:

{"cliente": [{
"cliente_cpf": "43900404640",
"cliente_nome": "Luiza",
"cliente_sobrenome": "Azevedo Carvalho",
"cliente_genero": "Feminino",
"cliente_nascimento": "2000-03-18",
"cliente_email": "[email protected]",
"cliente_saldo": "0.00",
"cliente_ultimocredito": "0000-00-00 00:00:00",
"cliente_registrado": "2017-12-20 16:14:53",
"cliente_loja": "004",
"enderecos": {
  "endereco_rua": "Rua Quarenta E Seis",
  "endereco_bairro": "Boa Esperança",
  "endereco_numero": "236",
  "endereco_cidade": "Cuiabá",
  "endereco_cep": "07263525",
  "endereco_uf": "Mt",
  "endereco_estado": "Cuiabá",
  "endereco_complemento": "Apto 42 Bloco A"
},
"contatos": {
  "telefone_dddtell": "65",
  "telefone_tell": "35268620",
  "telefone_dddcell": "65",
  "telefone_cell": "935268620"
}
}]}

to have this structure:

{
"cliente_cpf": "43900404640",
"cliente_nome": "Luiza",
"cliente_sobrenome": "Azevedo Carvalho",
"cliente_genero": "Feminino",
"cliente_nascimento": "2000-03-18",
"cliente_email": "[email protected]",
"cliente_saldo": "0.00",
"cliente_ultimocredito": "0000-00-00 00:00:00",
"cliente_registrado": "2017-12-20 16:14:53",
"cliente_loja": "004",
"endereco_rua": "Rua Quarenta E Seis",
"endereco_bairro": "Boa Esperança",
"endereco_numero": "236",
"endereco_cidade": "Cuiabá",
"endereco_cep": "07263525",
"endereco_uf": "Mt",
"endereco_estado": "Cuiabá",
"endereco_complemento": "Apto 42 Bloco A",
"telefone_dddtell": "65",
"telefone_tell": "35268620",
"telefone_dddcell": "65",
"telefone_cell": "935268620"
}

I started this way:

rawObject = JSON;
for ( let item in rawObject ) {
   if (rawObject[item] typeof === 'object') {
     for (const prop of rawObject[item] ){          
      // subir nivel
     }
   } else { // permance mesmo nivel}
}

I've tried using map() , Object.keys() but I'm doing something wrong.

    
asked by anonymous 21.02.2018 / 21:18

1 answer

1

I think the easiest way is to use the Object.assign() .

If the client property has an object:

let json = {
  "cliente": [
    {
      "cliente_cpf": "43900404640",
      "cliente_nome": "Luiza",
      "cliente_sobrenome": "Azevedo Carvalho",
      "cliente_genero": "Feminino",
      "cliente_nascimento": "2000-03-18",
      "cliente_email": "[email protected]",
      "cliente_saldo": "0.00",
      "cliente_ultimocredito": "0000-00-00 00:00:00",
      "cliente_registrado": "2017-12-20 16:14:53",
      "cliente_loja": "004",
      "enderecos": {
        "endereco_rua": "Rua Quarenta E Seis",
        "endereco_bairro": "Boa Esperança",
        "endereco_numero": "236",
        "endereco_cidade": "Cuiabá",
        "endereco_cep": "07263525",
        "endereco_uf": "Mt",
        "endereco_estado": "Cuiabá",
        "endereco_complemento": "Apto 42 Bloco A"
      },
      "contatos": {
        "telefone_dddtell": "65",
        "telefone_tell": "35268620",
        "telefone_dddcell": "65",
        "telefone_cell": "935268620"
      }
    }
  ]
};

// Copia as propriedades do objeto "json"
let novoObejto = Object.assign({}, ...json.cliente);
// Remove a propriedade "contatos" e "enderecos"
delete novoObejto.enderecos;
delete novoObejto.contatos;
// Copia as propriedades da propriedade "contatos" e "enderecos"
Object.assign(novoObejto, json.cliente[0].enderecos);
Object.assign(novoObejto, json.cliente[0].contatos);
console.log(novoObejto)

If the client property has multiple objects:

let json = {
  "cliente": [
    {
        "cliente_cpf": "43900404640",
        "cliente_nome": "Luiza",
        "cliente_sobrenome": "Azevedo Carvalho",
        "cliente_genero": "Feminino",
        "cliente_nascimento": "2000-03-18",
        "cliente_email": "[email protected]",
        "cliente_saldo": "0.00",
        "cliente_ultimocredito": "0000-00-00 00:00:00",
        "cliente_registrado": "2017-12-20 16:14:53",
        "cliente_loja": "004",
        "enderecos": {
          "endereco_rua": "Rua Quarenta E Seis",
          "endereco_bairro": "Boa Esperança",
          "endereco_numero": "236",
          "endereco_cidade": "Cuiabá",
          "endereco_cep": "07263525",
          "endereco_uf": "Mt",
          "endereco_estado": "Cuiabá",
          "endereco_complemento": "Apto 42 Bloco A"
        },
        "contatos": {
          "telefone_dddtell": "65",
          "telefone_tell": "35268620",
          "telefone_dddcell": "65",
          "telefone_cell": "935268620"
        }
      },{
        "cliente_cpf": "43900404640",
        "cliente_nome": "José",
        "cliente_sobrenome": "Luiz da Silva",
        "cliente_genero": "Masculino",
        "cliente_nascimento": "1980-03-18",
        "cliente_email": "[email protected]",
        "cliente_saldo": "0.00",
        "cliente_ultimocredito": "0000-00-00 00:00:00",
        "cliente_registrado": "2017-12-20 16:14:53",
        "cliente_loja": "004",
        "enderecos": {
          "endereco_rua": "Rua de Tal",
          "endereco_bairro": "Não sei",
          "endereco_numero": "236",
          "endereco_cidade": "São Paulo",
          "endereco_cep": "07263525",
          "endereco_uf": "Mt",
          "endereco_estado": "São Paulo",
          "endereco_complemento": "Apto 44 Bloco G"
        },
        "contatos": {
          "telefone_dddtell": "65",
          "telefone_tell": "35268620",
          "telefone_dddcell": "65",
          "telefone_cell": "935268620"
        }
      }
  ]
};

let novaEstrutura = [];
json['cliente'].forEach(cli => {
  // Copia as propriedades do objeto "json"
  let novoObjeto = Object.assign({}, cli);
  // Remove a propriedade "contatos" e "enderecos"
  delete novoObjeto.enderecos;
  delete novoObjeto.contatos;
  // Copia as propriedades da propriedade "contatos" e "enderecos"
  Object.assign(novoObjeto, cli.enderecos);
  Object.assign(novoObjeto, cli.contatos);
  novaEstrutura.push(novoObjeto);
});
console.log(novaEstrutura);

Reference

22.02.2018 / 00:24