Oracle中json_arrayagg返回值带\反斜杠转义符如何去除
Oracle json_arrayagg聚合结果多余转义符解决方法
问题原因
直接将CLOB类型的category字段传入json_arrayagg时,函数会默认把该字段值识别为普通字符串,而非原生JSON结构,因此会自动对字符串内的双引号添加反斜杠转义,最终输出带多余转义符的结果。
可行解决方案
不要直接传入原始CLOB字符串,先将字段内容显式声明为JSON类型后再传入聚合函数,函数就不会做多余转义:
- 方法1:通用兼容写法(Oracle 12c R2及以上版本支持),使用
TREAT将CLOB转换为JSON类型
select json_arrayagg( TREAT(category AS JSON) returning clob ) as category_result from classInfo;
- 方法2:使用
json_query解析JSON片段后聚合(兼容性更广)
select json_arrayagg( json_query(category, '$' error on error) returning clob ) as category_result from classInfo;
执行后正确输出
执行上述语句后会返回标准无转义的JSON数组:
[{"category":"AAA"},{"category":"BBB"}]
注意事项
- 禁止使用
replace暴力替换反斜杠的方式处理,一旦业务数据中本身包含合法的双引号、反斜杠字符,暴力替换会直接破坏JSON结构合法性,导致后续解析失败。 - 所有处理逻辑的核心是让
json_arrayagg识别到传入内容本身是JSON结构,而非普通文本,就不会触发字符串转义逻辑。
内容的提问来源于stack exchange,提问作者mike
相关产品推荐
相关产品推荐

