You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Oracle 20c中如何构造含序列化字符串嵌套JSON的JSON值?

解决Oracle 20c中嵌套JSON序列化为字符串的问题

你遇到的问题是因为json_serialize默认行为会保留JSON对象格式,而非将其转换为带转义的字符串。要得到你期望的结果,只需要在json_serialize中指定FORMAT TEXT参数,强制它将JSON对象序列化为文本字符串:

select json { 'y' : json_serialize(json('{"hello":"world"}') format text) } x from dual;

执行这条语句后,返回的结果就是你想要的:

{"y":"{"hello":"world"}"}

为什么原来的语句不生效?

默认情况下,json_serialize使用FORMAT JSON参数(可省略,因为是默认值),它会把输入的JSON对象直接以JSON数据类型返回。当你把这个结果嵌入到外层的json {}构造中时,Oracle会将其当作嵌套的JSON对象处理,所以最终y的值是一个JSON对象,而非字符串。

通过指定FORMAT TEXT,json_serialize会将JSON对象转换为带转义双引号的VARCHAR2类型字符串,外层的json {}构造就会将这个字符串作为普通字符串值嵌入,自动处理转义逻辑,从而得到你期望的嵌套字符串格式。

如果你的内层JSON是动态生成的(比如来自某个字段或子查询),这种方法也能确保所有特殊字符都被正确转义,避免JSON格式错误。

内容的提问来源于stack exchange,提问作者Josh

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.09 15:27:38