【问题标题】:Constructing combined json from records in CLOB(Oracle)从 CLOB(Oracle) 中的记录构造组合 json
【发布时间】:2020-05-02 14:27:26
【问题描述】:

我将 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 格式时我需要更改它能避免就不想做。

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

谢谢,

【问题讨论】:

    标签: java json oracle


    【解决方案1】:

    这样的事情应该让你开始

    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>
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-05-12
      • 1970-01-01
      • 1970-01-01
      • 2020-12-06
      • 1970-01-01
      • 2018-12-03
      相关资源
      最近更新 更多