Преобразовать Oracle вывод запроса в json (Oracle / NodeJS) - PullRequest
0 голосов
/ 02 апреля 2020

Я делаю приложение с React / Express (NodeJS) / Oracle,

У меня есть маршрут Express, который получает данные из таблицы Oracle,

Вот часть кода в маршруте:

let conn;
  try {
conn = await oracledb.getConnection(config);
const result = await conn.execute("select  JSON_OBJECT ('departement' VALUE departement, 'ufh' VALUE ufh, 'libelle' VALUE libelle, 'nomhopital' VALUE nomhopital, 'typeservice' VALUE typeservice, 'actif' VALUE actif)  from Z_SOUPAP2CARTESITE where actif=1");

res.send(result.rows);
}

Но когда я go на маршруте в браузере, данные имеют такую ​​форму:

[["92","028X362","ABC ACCUEIL URG MEDECINE","ANTOINE BECLERE","ADULTE",1],["92","028X472","ABC URGENCES PEDIATRIQUE","ANTOINE BECLERE","PEDIATRIE",1],["92","014X545","APR ACCEUIL URGENCES ADU","AMBROISE PARE","ADULTE",1]]

и я хочу это:

[
  {"departement":"92","ufh":"028X362","libelle":"ABC ACCUEIL URG MEDECINE","nomhopital":"ANTOINE BECLERE","typeservice":"ADULTE","actif":1},
  {"departement":"92","ufh":"028X472","libelle":"ABC URGENCES PEDIATRIQUE","nomhopital":"ANTOINE BECLERE","typeservice":"PEDIATRIE","actif":1}
]

1 Ответ

2 голосов
/ 02 апреля 2020

Почему вы используете JSON_VALUE? Драйвер возвращает нативные JavaScript объекты. Вы можете написать запрос следующим образом:

select department "department",
  ufh "ufh",
  libelle "libelle",
  nomhopital "nomhopital",
  typeservice "typeservice"
from Z_SOUPAP2CARTESITE 
where actif=1 

В приведенном выше запросе псевдонимы столбцов в двойных кавычках используются для управления регистром ключей.

По умолчанию драйвер возвращает массив массивов (без ключей). Если вам нужен массив объектов, вам нужно передать объект параметров в execute, который изменит outFormat. См. Эту часть do c: https://oracle.github.io/node-oracledb/doc/api.html#queryoutputformats

Вот пример из do c:

const result = await connection.execute(
  `SELECT department_id, department_name
   FROM departments
   WHERE manager_id < :id`,
  [110],  // bind value for :id
  { outFormat: oracledb.OUT_FORMAT_OBJECT }
);

console.log(result.rows);

Если вы хотите использовать JSON Функции генерации в Oracle, такие как JSON_VALUE, вы должны избегать двойного анализа - просто получите доступ к строке как JSON.

См. Эту серию для получения дополнительной информации о создании REST API с Node.js и Oracle База данных: https://jsao.io/2018/03/creating-a-rest-api-with-node-js-and-oracle-database/

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...