MySQL使用json_merge_patch出现Invalid JSON text报错排查
JSON_MERGE_PATCH报错原因排查
核心错误点
你在调用json_merge_patch函数时,错误地给列名jdata加上了单引号,导致函数第一个参数收到的是普通字符串'jdata',而非jdata列中存储的合法JSON数据。字符串'jdata'不符合JSON格式规范,因此触发了参数1位置0的无效JSON报错。
修正后的SQL语句
insert into stats.daily_user_stats VALUES (null,'2022-02-02',1,18,3,'{"pageviews":{"user":1}}') on duplicate key update jdata = if( json_contains_path(jdata, 'one', '$.pageviews.user'), json_set(jdata, '$.pageviews.user', cast(json_extract(jdata, '$.pageviews.user')+1 as UNSIGNED)), -- 去掉jdata两侧的单引号,直接传入列名即可 json_merge_patch(jdata,'{"pageviews":{"user":1}}') )
额外注意项
如果你的MySQL版本支持JSON_INSERT、JSON_COALESCE相关函数,也可以简化逻辑避免if判断,进一步降低语法错误概率。
内容的提问来源于stack exchange,提问作者RJW
相关产品推荐
相关产品推荐

