MySQL中将JSON对象转为对象数组的更新方法问询
解决方案
你的问题根源是data列存储的是字符串格式的JSON,而非MySQL原生JSON类型,直接调用JSON_ARRAY()会把整个字符串作为数组元素,而非解析后的JSON对象。以下是具体解决步骤:
1. 先验证转换结果
执行查询确认转换逻辑正确:
-- MySQL 8.0.17+版本,用JSON_PARSE解析字符串为JSON对象后包装成数组 SELECT JSON_ARRAY(JSON_PARSE(data)) FROM A; -- 兼容低版本的写法,先用JSON_UNQUOTE处理再转JSON对象 SELECT JSON_ARRAY(JSON_UNQUOTE(data)) FROM A;
2. 批量更新数据
确认结果符合预期后,执行UPDATE语句永久修改:
UPDATE A SET data = JSON_ARRAY(JSON_PARSE(data)) WHERE JSON_VALID(data); -- 仅更新合法的JSON字符串记录,避免报错
3. 针对JSON类型列的JSON_SET用法(可选)
如果data本身是MySQL原生JSON类型,只是需要把其中的某个对象字段转为数组,可使用JSON_SET:
-- 示例:将data中key字段的对象值转为数组 UPDATE A SET data = JSON_SET( data, '$.key', JSON_ARRAY(JSON_EXTRACT(data, '$.key')) ) WHERE JSON_TYPE(JSON_EXTRACT(data, '$.key')) = 'OBJECT';
内容的提问来源于stack exchange,提问作者Alireza Bashiri
相关产品推荐
相关产品推荐

