我有 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/