Search code examples
node.jsoracle-databasenode-oracledb

How to reformat oracledb json output?


Using oracledb node.js driver with outFormat:oracledb.OBJECT option returns json, but coloumn names are formated uppercase (property names follow Oracle's standard name-casing rules), like this: {"ID":"1"} Is it possible to make them in lowercase, like this: {"Id":"1"}?

JSON_OBJECT introduced In Oracle Database 12.2 is not available for me.


Solution

  • Just use column aliases:

    const oracledb = require('oracledb');
    const config = require('./dbConfig.js');
    
    (async function() {
      let conn;
      let result;
    
      try {
        conn = await oracledb.getConnection(config);
    
        result = await conn.execute(
         `select first_name || ' ' || last_name name,
            email
          from employees
          where rownum = 1`,
          [], // no binds
          {
            outFormat: oracledb.OBJECT
          }
        );
    
        // This is the problem, uppercase column names, no?
        console.log(result.rows); // [ { NAME: 'Steven King', EMAIL: 'SKING' } ]
    
        result = await conn.execute(
         `select first_name || ' ' || last_name "name",
            email "email"
          from employees
          where rownum = 1`,
          [], // no binds
          {
            outFormat: oracledb.OBJECT
          }
        );
    
        // Here's the result with case sensitve aliases
        console.log(result.rows); // [ { name: 'Steven King', email: 'SKING' } ]
      } catch (err) {
        // Will throw, but only after finally runs
        throw err; 
      } finally {
        if (conn) {
          try {
            await conn.close();
          } catch (err) {
            console.log('error closing conn', err);
          }
        }
      }
    }());
    

    Or "process" the results after. You might find this relevant: https://jsao.io/2015/07/relational-to-json-with-node-js/