json_serialize非空输入返回null是否为Bug?技术咨询
为什么json_serialize(data)返回null?是否属于Bug?
这大概率不是Bug,而是由以下几种常见情况导致的:
data列本身就是null值
即便你定义它是存储JSON数据的列,也不代表每条记录的data字段都有有效值。可以执行下面的查询验证原字段是否为空:select data, json_serialize(data) from mytable如果data列对应的行显示null,那json_serialize返回null就是正常行为。
存储的JSON格式无效
有些场景下,列里存的是不符合JSON语法规范的内容(比如缺少引号、括号不匹配),这会导致json_serialize无法解析,返回null。你可以用数据库自带的JSON校验工具排查:- MySQL:
select data, JSON_VALID(data) from mytable(返回1表示有效,0无效) - PostgreSQL:
select data, jsonb_typeof(data) from mytable(如果返回null说明格式无效)
- MySQL:
函数与列类型不匹配
不同数据库对json_serialize的实现逻辑有差异:如果data是数据库原生的JSON类型(比如JSONB、JSON),很多时候直接查询select data from mytable就能得到序列化后的字符串结果。强行使用json_serialize可能因类型不兼容返回null。
内容的提问来源于stack exchange,提问作者Josh
相关产品推荐
相关产品推荐

