如何让Oracle SQL生成的JSON去除外层包裹的{}
解决Oracle SQL返回JSON键值对而非完整对象的问题
推荐方案:直接构造符合要求的JSON键值对
利用JSON_SERIALIZE函数处理值的JSON格式,再和键名字符串拼接,既能保证格式正确,又适配各种值类型:
SELECT '"hist":' || JSON_SERIALIZE(NULL FORMAT JSON) FROM DUAL;
执行后返回结果就是"hist":null。如果需要替换值为其他类型,比如字符串'2024-01-01',只需修改NULL为对应值,结果会自动生成合法的JSON格式(如"hist":"2024-01-01")。
备选方案:字符串截取(仅适用于简单单键场景)
如果你的JSON结构固定为单个键值对、没有嵌套的大括号,可以用字符串截取去掉外层的{}:
SELECT SUBSTR( json_object ('hist' VALUE NULL FORMAT JSON), 2, LENGTH(json_object ('hist' VALUE NULL FORMAT JSON)) - 2 ) FROM DUAL;
这种方法实现简单,但如果后续JSON结构变得复杂(比如嵌套对象、数组),会出现截取错误,仅适合固定简单场景。
内容的提问来源于stack exchange,提问作者Larry G
相关产品推荐
相关产品推荐

