How to Restructure a JSON

Asked

Viewed 48 times

-1

I created a Node js API connected to Oracle 12.1.0.1.0c where I connect and do the request as follows through the dbconection.js file as shown below:

const oracledb = require('oracledb');
const { json } = require('body-parser');
module.exports = async function retornaPerguntas(req, res) {

    var password = 'dbaadv'
    

    try {
        connection = await oracledb.getConnection({
            user: "dbaadv",
            password: password,
            connectString: "(DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=<ip>)(PORT=1521))(CONNECT_DATA=(SERVICE_NAME=prd)))"
        });
        
        // Executa a query para retornar as altas
        sql = " SELECT  PER.CD_QUESTAO,  " +
            "         PER.DS_QUESTAO,  " +
            "         PER.TP_QUESTAO,  " +
            "         PER.DS_SETOR,    " +
            "         PER.SN_ATIVO,    " +
            "         PER.NR_ORDEM     " +
            " FROM PERGUNTAS_PESQUISA_NPS PER " +
            " WHERE PER.SN_ATIVO = 'S' " +
            " ORDER BY 6               ";
        result = await connection.execute(sql);        
        
        const objResult = await montaArrayObjetos(result.metaData,result.rows)

        console.log(objResult);

        //console.log(result.metaData);
        

    } catch (err) {
        //mensagem de erro
        return res.send(err.message);
    } finally {
        if (connection) {
            try {
                // Sempre fechar a conexão
                await connection.close();
                console.log('conexão fechada com sucesso');
            } catch (err) {
                console.error(err.message);
            }
        }
        if (result.rows.length == 0) {
            //Caso retorne nenhum resultado
            return res.send('Não há nada para retornar');
        } else {
            //Retorna todas as altas
            return res.send(JSON.parse(JSON.stringify(arrObjects)));
        }

    }
}

Executing this application the function above returns the JSON in this format below due to the version of the database.

{
    "metaData": [
        {
            "name": "CD_QUESTAO"
        },
        {
            "name": "DS_QUESTAO"
        },
        {
            "name": "TP_QUESTAO"
        },
        {
            "name": "DS_SETOR"
        },
        {
            "name": "SN_ATIVO"
        },
        {
            "name": "NR_ORDEM"
        }
    ],
    "rows": [
        [
            8,
            "Em uma escala de 0 a 10; o quanto você recomendaria o Loja A ou amigo?",
            "NOTA",
            "SERVICOS",
            "S",
            10
        ],
        [
            9,
            "1. Em uma escala de 0 a 10; como você avalia o *atendimento A*?",
            "NOTA",
            "SERVICOS",
            "S",
            20
        ],
        [
            10,
            "2. Em uma escala de 0 a 10; como você avalia o *atendimento da B*?",
            "NOTA",
            "SERVICOS",
            "S",
            30
        ],
        [
            11,
            "3. Em uma escala de 0 a 10 como vc avalia o atendimento dos *Serviços C*?",
            "NOTA",
            "SERVICOS",
            "S",
            40
        ],
        [
            12,
            "Finalizando a pesquisa; em uma breve mensagem; informe as principais ações corretivas que você nos recomenda.",
            "OBSERVACAO",
            "SERVICOS",
            "S",
            50
        ],
        [
            14,
            "A Loja A agradece sua participação",
            "OBSERVACAO",
            "SERVICOS",
            "S",
            60
        ]
    ]
}

How could I standardize this structure in javascript above in the JSON standard format as shown below? I tried some ways, but to no avail !!!

{
    {
        "CD_QUESTAO": 8,
        "DS_QUESTAO": "Em uma escala de 0 a 10; o quanto você recomendaria o Loja A ou amigo?",
        "TP_QUESTAO": "NOTA",
        "DS_SETOR": "SERVICOS",
        "SN_ATIVO": "S",
        "NR_ORDEM": 10
    },
    {
        "CD_QUESTAO": 9,
        "DS_QUESTAO": "1. Em uma escala de 0 a 10; como você avalia o *atendimento A*?",
        "TP_QUESTAO": "NOTA",
        "DS_SETOR": "SERVICOS",
        "SN_ATIVO": "S",
        "NR_ORDEM": 20
    },
    {
        "CD_QUESTAO": 10,
        "DS_QUESTAO": "2. Em uma escala de 0 a 10; como você avalia o *atendimento da B*?",
        "TP_QUESTAO": "NOTA",
        "DS_SETOR": "SERVICOS",
        "SN_ATIVO": "S",
        "NR_ORDEM": 30
    },
    {
        "CD_QUESTAO": 11,
        "DS_QUESTAO": "3. Em uma escala de 0 a 10 como vc avalia o atendimento dos *Serviços C*?",
        "TP_QUESTAO": "NOTA",
        "DS_SETOR": "SERVICOS",
        "SN_ATIVO": "S",
        "NR_ORDEM": 40
    },
    {
        "CD_QUESTAO": 12,
        "DS_QUESTAO": "Finalizando a pesquisa; em uma breve mensagem; informe as principais ações corretivas que você nos recomenda.",
        "TP_QUESTAO": "OBSERVACAO",
        "DS_SETOR": "SERVICOS",
        "SN_ATIVO": "S",
        "NR_ORDEM": 50
    },
    {
        "CD_QUESTAO": 14,
        "DS_QUESTAO": "A Loja A agradece sua participação",
        "TP_QUESTAO": "OBSERVACAO",
        "DS_SETOR": "SERVICOS",
        "SN_ATIVO": "S",
        "NR_ORDEM": 60
    }
}

I tried to solve the problem by creating a function montaArrayObjects that receives the arrays of KEYS and VALUES as below:

async function montaArrayObjetos(objResultColunas,objResultlinhas){
    /*

    'CD_QUESTAO': result.rows[i][i],
            'DS_QUESTAO': result.rows[i][i],
            'TP_QUESTAO': result.rows[i][i],
            'DS_SETOR': result.rows[i][i],
            'SN_ATIVO': result.rows[i][i],
            'NR_ORDEM': result.rows[i][i],


    */

    let tamObjResulcolunas = objResultColunas.length;
    let tamObjResultlinhas = objResultlinhas.length;
    let arrObjects = new Array();
    var obj = new Array();
    var propriedades = "";
   


    var objDados ={};
   
    
    //linhas
    for (let lin = 0; lin < tamObjResultlinhas; lin ++){        
        
        //console.log(objResultlinhas[lin]);

        //Colunas
        for(let cols = 0; cols < tamObjResulcolunas; cols ++){

            //console.log(`cols: ${cols} tamObjResulcolunas: ${tamObjResulcolunas} lin: ${lin} tamObjResultlinhas: ${tamObjResultlinhas}`)
            
            //console.log(`'${objResultColunas[cols].name}':${objResultlinhas[lin][cols]}` + (cols == 5 ? '' : ','))  ; 

            if(cols <= tamObjResulcolunas-1){               

                //obj.push(`'${objResultColunas[cols].name}':${objResultlinhas[lin][cols]}` + (cols == 5 ? '' : ','));
                console.log(`'${objResultColunas[cols].name}':${objResultlinhas[lin][cols]}` + (cols == 5 ? '' : ','));                 

                //arrObjects.push(obj);
                
            }
                                      
        }
        console.log('FIM');
        //console.log(obj);
       
        //arrObjects.push(obj);
       
    }

    //console.log(arrObjects); 
    return arrObjects;

}

When I put to print the return of this function returns like this:

'CD_QUESTAO':8,
'DS_QUESTAO':Em uma escala de 0 a 10; o quanto você recomendaria o Loja A ou amigo?,
'TP_QUESTAO':NOTA,
'DS_SETOR':SERVICOS,
'SN_ATIVO':S,
'NR_ORDEM':10
FIM
'CD_QUESTAO':9,
'DS_QUESTAO':1. Em uma escala de 0 a 10; como você avalia o *atendimento A*?,
'TP_QUESTAO':NOTA,
'DS_SETOR':SERVICOS,
'SN_ATIVO':S,
'NR_ORDEM':20
FIM
'CD_QUESTAO':10,
'DS_QUESTAO':2. Em uma escala de 0 a 10; como você avalia o *atendimento da B*?,
'TP_QUESTAO':NOTA,
'DS_SETOR':SERVICOS,
'SN_ATIVO':S,
'NR_ORDEM':30
FIM
'CD_QUESTAO':11,
'DS_QUESTAO':3. Em uma escala de 0 a 10 como vc avalia o atendimento dos *Serviços C*?,
'TP_QUESTAO':NOTA,
'DS_SETOR':SERVICOS,
'SN_ATIVO':S,
'NR_ORDEM':40
FIM
'CD_QUESTAO':12,
'DS_QUESTAO':Finalizando a pesquisa; em uma breve mensagem; informe as principais ações corretivas que você nos recomenda.,
'TP_QUESTAO':OBSERVACAO,
'DS_SETOR':SERVICOS,
'SN_ATIVO':S,
'NR_ORDEM':50
FIM
'CD_QUESTAO':14,
'DS_QUESTAO':A Loja A agradece sua participação,
'TP_QUESTAO':OBSERVACAO,
'DS_SETOR':SERVICOS,
'SN_ATIVO':S,
'NR_ORDEM':60
FIM

However, I cannot separate the records where the ID is CD_QUESTAO and convert it to JSON

  • It’s just a case of iterating over the array and mounting the objects. What you tried?

  • I added a function I created where it receives the array of keys and values and the return of it

  • My difficulty was juxtaposing add the properties to the object, very good their adaptation, thank you !!!

1 answer

1


I’m not sure if your difficulty is in iterating over your array, or adding the properties to the object. Both are relatively simple, and you yourself have created a loop to print the values, which is pretty much all the work.

See, a direct adaptation of its function:

function montaArrayObjetos(objResultColunas, objResultlinhas) {
    let tamObjResulcolunas = objResultColunas.length;
    let tamObjResultlinhas = objResultlinhas.length;
    let arrObjects = [];

    for (let lin = 0; lin < tamObjResultlinhas; lin ++) {
        var objDados = {};

        for (let cols = 0; cols < tamObjResulcolunas; cols ++) {
            objDados[objResultColunas[cols].name] = objResultlinhas[lin][cols];  
        }

        arrObjects.push(objDados);
    }

    return arrObjects;
}

Basically just create the object objDados inside the internal loop, as you will create an object for each iteration. Then add the properties in it, and push it to the array arrObjects, which is its result.

Working:

let objResult = {"metaData":[{"name":"CD_QUESTAO"},{"name":"DS_QUESTAO"},{"name":"TP_QUESTAO"},{"name":"DS_SETOR"},{"name":"SN_ATIVO"},{"name":"NR_ORDEM"}],"rows":[[8,"Em uma escala de 0 a 10; o quanto você recomendaria o Loja A ou amigo?","NOTA","SERVICOS","S",10],[9,"1. Em uma escala de 0 a 10; como você avalia o *atendimento A*?","NOTA","SERVICOS","S",20],[10,"2. Em uma escala de 0 a 10; como você avalia o *atendimento da B*?","NOTA","SERVICOS","S",30],[11,"3. Em uma escala de 0 a 10 como vc avalia o atendimento dos *Serviços C*?","NOTA","SERVICOS","S",40],[12,"Finalizando a pesquisa; em uma breve mensagem; informe as principais ações corretivas que você nos recomenda.","OBSERVACAO","SERVICOS","S",50],[14,"A Loja A agradece sua participação","OBSERVACAO","SERVICOS","S",60]]};

function montaArrayObjetos(objResultColunas, objResultlinhas) {
    let tamObjResulcolunas = objResultColunas.length;
    let tamObjResultlinhas = objResultlinhas.length;
    let arrObjects = [];

    for (let lin = 0; lin < tamObjResultlinhas; lin ++) {
        var objDados = {};

        for (let cols = 0; cols < tamObjResulcolunas; cols ++) {
            objDados[objResultColunas[cols].name] = objResultlinhas[lin][cols];  
        }

        arrObjects.push(objDados);
    }

    return arrObjects;
}

console.log(montaArrayObjetos(objResult.metaData, objResult.rows));

Browser other questions tagged

You are not signed in. Login or sign up in order to post.