Построение комбинированных json из записей в CLOB (Oracle) - PullRequest
0 голосов
/ 02 мая 2020

У меня json хранится в CLOB (Oracle). Фактическая json структура очень сложна и велика, но для вопроса скажем

{"id":"1", "name":"a"}

В моем вызове хранимой процедуры (getById) Oracle, я получаю список выше json (SYS_REFCURSOR), теперь мне нужно построить новый json, как показано ниже

{ "results" : {
   "getById" : [
      {"id":"1", "name":"a"},
      {"id":"2", "name":"b"},
      {"id":"3", "name":"c"}
    ],
   "result_count" : 3
   },
   "Status":"SUCCESS"
   }
}

Если мне не нужно знать структуру json возвращенный json из хранимой процедуры и просто передать клиенту с выше json форматом, что будет лучшим подходом? Если я сохраню возвращенное значение json в строку и создам его как часть тега getById, оно обрабатывается как одно значение и прерывается json. Я могу построить это с помощью ObjectMapper, но в этом случае мне нужно создать класс объекта для {"id": "1", "name": "a"} в Java, и мне нужно изменить это, когда формат json получает изменил то, чего я не хочу делать, если смогу избежать.

Пожалуйста, помогите мне найти лучшее решение.

Спасибо,

1 Ответ

0 голосов
/ 04 мая 2020

Как-то так должно начаться

SQL> create table t ( c clob );

Table created.

SQL> insert into t
  2  select '{"id":"'||rownum||'", "name":"a"}'
  3  from dual
  4  connect by level <= 10;

10 rows created.

SQL>
SQL> set serverout on
SQL> declare
  2    l_results json_object_t := json_object_t();
  3    l_elem    json_array_t := JSON_ARRAY_T();
  4  begin
  5    for i in ( select c from t )
  6    loop
  7       l_elem.append(json_object_t(i.c));
  8    end loop;
  9    l_results.put('getById',l_elem);
 10    dbms_output.put_line(l_results.stringify);
 11
 12  end;
 13  /
{"getById":[{"id":"1","name":"a"},{"id":"2","name":"a"},{"id":"3","name":"a"},{"id":"4","name":"a"},{"id":"5","name":"a"},{"id":"6
","name":"a"},{"id":"7","name":"a"},{"id":"8","name":"a"},{"id":"9","name":"a"},{"id":"10","name":"a"}]}

PL/SQL procedure successfully completed.

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