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
相关产品推荐
相关产品推荐

