java - 从 CLOB(Oracle) 中的记录构造组合 json

标签 java json oracle

我有 json 存储在 CLOB (Oracle) 中 实际的 json 结构非常复杂且庞大,但对于这个问题来说

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

在对 Oracle 的存储过程调用(getById)中,我得到了上述 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 保存到 String 中并构造为 getById 标记的一部分,它会将其视为一个值并破坏 json。 我可以使用 ObjectMapper 构建它,但在这种情况下,我需要在 Java 中为 {"id":"1", "name":"a"} 创建对象类,并且当 json 格式发生更改时我需要更改它,而我不这样做如果可以避免我就不想做。

请指导我找到更好的解决方案。

谢谢

最佳答案

这样的事情应该可以帮助你开始

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>

关于java - 从 CLOB(Oracle) 中的记录构造组合 json,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61560953/

相关文章:

java替换德语变音符号

android - 在 sencha touch 2 中解析 json

java - SWIG - 为具有四个传递字节数组的参数的函数创建类型映射

java - 使用 Java 将 xml 转换为 json

java - html5 音频 GET 连接由移动设备上的对等方重置(在 PC 上工作正常)

javascript - 在 Javascript 中将对象的一部分从数字键转换为数组

node.js - 在nodejs中转义json中的双引号

mysql - 从 Oracle Apex 中的 3 个表中选择数据

java - 是否可以从Java代码调用数据库触发器?

sql - 从oracle sql脚本中免除星期日