【发布时间】:2021-08-24 07:56:01
【问题描述】:
我想将原始 API 响应存储在 Clob 中,并通过一个过程以通用方式解析 Clob 中包含的 json - 这意味着我必须动态构建 json 格式。这样做的一种方法是正则表达式第一个键:值对,并提取所有键中的一行作为列标题。然后可以以某种方式使用这些列标题来动态创建 json 格式,然后可以解析给定 clob 中的其余 json。
我这里有这个标准的 sn-p 用于解析已知的 json-string:
SELECT * FROM json_table((select json_response from Some_Table where Condition=#input_parameter#), '$[*]'
COLUMNS
column1 varchar(256) PATH '$.column1',
column2 varchar(256) PATH '$.column2',
column3 varchar(256) PATH '$.column3',
)
这里,column1、column2 和column3 是已知和定义的。假设选择了不同的 Clob,并带有其他列 - 我需要将 json 中的键值正则表达式作为列标题,然后动态创建上面看到的列定义(标准类型 varchar(256) 以保持简单)。
clob 中的 Json 是非嵌套 json 字符串的列表。 json 始终具有这种格式:
[{"column1":value1,"column2":"value2","column3":value3}, {...}, {...}, ...]
因此,正则表达式将捕获第一个 {} 对之间的所有键值,并提取分号分隔键值对左侧的所有字段的值。
从这里开始,如何从正则表达式结果动态创建列定义?
上面给定的示例数据为这个表提供了上面的查询:
<table style="width: 5%;" border="2" cellpadding="5">
<tbody>
<tr>
<td> column1 </td>
<td> column2 </td>
<td> column3 </td>
</tr>
<tr>
<td> value1</td>
<td> value2</td>
<td> value3</td>
</tr>
</tbody>
</table>
给定一个包含任意数量列的 clob,我需要以类似的方式提取列并创建一个表,如下所示:
<table style="width: 5%;" border="2" cellpadding="5">
<tbody>
<tr>
<td style="width: 20%;"> column1</td>
<td style="width: 16.2539%;">column2 </td>
<td style="width: 16.7461%;">column3 </td>
<td style="width: 17%;">... </td>
<td style="width: 19%;">column_n </td>
</tr>
<tr>
<td style="width: 20%;"> value1</td>
<td style="width: 16.2539%;"> value2</td>
<td style="width: 16.7461%;"> value3</td>
<td style="width: 17%;">...</td>
<td style="width: 19%;"> value</td>
</tr>
<tr>
<td style="width: 20%;"> ...</td>
<td style="width: 16.2539%;"> ... </td>
<td style="width: 16.7461%;"> ...</td>
<td style="width: 17%;">... </td>
<td style="width: 19%;"> ...</td>
</tr>
<tr>
<td style="width: 20%;"> value</td>
<td style="width: 16.2539%;"> value</td>
<td style="width: 16.7461%;"> value</td>
<td style="width: 17%;">... </td>
<td style="width: 19%;"> value</td>
</tr>
</tbody>
</table>
【问题讨论】:
标签: oracle