MySQL JSON函数返回字符串而非JSON对象问题求解
解决MySQL函数中JSON变量嵌套序列化问题
你的函数执行后返回的obj值是字符串形式的JSON,而非嵌套JSON对象,这是因为MySQL直接将JSON类型变量传入JSON_OBJECT时会自动序列化为字符串。以下是两种可行的解决方法:
方法一:使用JSON_SET构建嵌套JSON
修改函数代码如下:
delimiter $$ CREATE FUNCTION sf_textjson() RETURNS json BEGIN declare s JSON; SET s = JSON_OBJECT('year', 2024); RETURN JSON_SET(JSON_OBJECT(), '$.obj', s); END $$ delimiter ;
方法二:显式解析JSON变量(仅作参考,推荐用方法一)
通过JSON_UNQUOTE将JSON变量转换为可嵌入的JSON对象:
delimiter $$ CREATE FUNCTION sf_textjson() RETURNS json BEGIN declare s JSON; SET s = JSON_OBJECT('year', 2024); RETURN JSON_OBJECT('obj', JSON_UNQUOTE(s)); END $$ delimiter ;
原理说明
JSON_SET可以直接将JSON类型的值写入目标JSON对象的指定路径($.obj),避免了JSON_OBJECT对参数的字符串序列化处理,从而生成正确的嵌套JSON结构。
内容的提问来源于stack exchange,提问作者End1-1
相关产品推荐
相关产品推荐

