Mysql插入JSON串会被去一层转义
Mysql插入JSON串会被去一层转义
问题描述
背景:在数据库更新、新增一个字段为JSON串的时候,被去一层转义,导致程序解析失败,报错
原JSON串
[{"rules": [{"ruleType": 1,"value": "1458","rate": 90},{"ruleType": 3,"value": "{\"begin\":\"测试欢迎语\",\"end\":\"测试结束语\",\"template\":[\"6962def-sadfa\"],\"title\":\"标题\"}","rate": 10}],"tag": 1,"sort": 2,"ruleName": "分流默认路由"},{"rules": [{"ruleType": 1,"value": "1533","rate": ""}],"labelCode": "red_user","sort": 1,"tag": 2,"ruleName": "标签路由"}
]
先对JSON压缩
[{"rules": [{"ruleType": 1,"value": "1458","rate": 90},{"ruleType": 3,"value": "{\"begin\":\"测试欢迎语\",\"end\":\"测试结束语\",\"template\":[\"6962def-sadfa\"],\"title\":\"标题\"}","rate": 10}],"tag": 1,"sort": 2,"ruleName": "分流默认路由"},{"rules": [{"ruleType": 1,"value": "1533","rate": ""}],"labelCode": "red_user","sort": 1,"tag": 2,"ruleName": "标签路由"}]
然后就直接
update `shuidi_cs_biz`.`session_sub_route_rule` set rules = '[{"rules": [{"ruleType": 1,"value": "1458","rate": 90},{"ruleType": 3,"value": "{\"begin\":\"测试欢迎语\",\"end\":\"测试结束语\",\"template\":[\"6962def-sadfa\"],\"title\":\"标题\"}","rate": 10}],"tag": 1,"sort": 2,"ruleName": "分流默认路由"},{"rules": [{"ruleType": 1,"value": "1533","rate": ""}],"labelCode": "red_user","sort": 1,"tag": 2,"ruleName": "标签路由"}]' where id = 1;
update 或者 insert 都行, 然后查下更新后的
[
{"rules": [{"ruleType": 1,"value": "1458","rate": 90},{//注意这部分,解析出现问题了"ruleType": 3,"value": "{"begin ":"测试欢迎语 ","end ":"测试结束语 ","template ":["6962 def - sadfa "],"title ":"标题 "}","rate": 10}],"tag": 1,"sort": 2,"ruleName": "分流默认路由"
},
{"rules": [{"ruleType": 1,"value": "1533","rate": ""}],"labelCode": "red_user","sort": 1,"tag": 2,"ruleName": "标签路由"
}]
然后GG了,线上出问题了。
注意
这种问题出现在**,JSON字符串字段,包含一个转义字符串的情况**,如图
这里,
解决的办法
第一种: 在压缩字符串后,进行一次转义
[{\"rules\": [{\"ruleType\": 1,\"value\": \"1458\",\"rate\": 90},{\"ruleType\": 3,\"value\": \"{\\\"begin\\\":\\\"测试欢迎语\\\",\\\"end\\\":\\\"测试结束语\\\",\\\"template\\\":[\\\"6962def-sadfa\\\"],\\\"title\\\":\\\"标题\\\"}\",\"rate\": 10}],\"tag\": 1,\"sort\": 2,\"ruleName\": \"分流默认路由\"},{\"rules\": [{\"ruleType\": 1,\"value\": \"1533\",\"rate\": \"\"}],\"labelCode\": \"red_user\",\"sort\": 1,\"tag\": 2,\"ruleName\": \"标签路由\"}]
然后新增,修改就都可以
第二种
有第一种,必然有第二种,哈哈哈
1、我用的navicat,直接在工具上,copy as insert statement
2、 然后发现,人家的格式就是转义后的,参考这个维护就行
insert into `shuidi_cs_biz`.`session_sub_route_rule` ( `sub_route_name`, `channel_id`, `rules`, `status`, `is_delete`, `create_time`, `update_time`) values ( '路由', '7', '[{\"rules\": [{\"ruleType\": 1,\"value\": \"1458\",\"rate\": 90},{\"ruleType\": 3,\"value\": \"{\"begin\":\"测试欢迎语\",\"end\":\"测试结束语\",\"template\":[\"6962def-sadfa\"],\"title\":\"标题\"}\",\"rate\": 10}],\"tag\": 1,\"sort\": 2,\"ruleName\": \"分流默认路由\"},{\"rules\": [{\"ruleType\": 1,\"value\": \"1533\",\"rate\": \"\"}],\"labelCode\": \"red_user\",\"sort\": 1,\"tag\": 2,\"ruleName\": \"标签路由\"}]', '1', '1', '2021-07-26 10:25:02', '2022-04-15 11:05:46');
这个问题采坑线上两次了
Mysql插入JSON串会被去一层转义相关推荐
- php mysql插入的数据有引号,PHP引号转义中解决POST,GET,Mysql数据自动转义问题
在处理mysql和GET.POST的数据时,常常要对数据的引号进行转义操作. PHP中有三个设置可以实现自动对'(单引号),"(双引号),\(反斜线)和 NULL 字符转转. PHP称之为魔 ...
- mysql操作json优点和缺点_SQL-mysql操作json
一 前言 MySQL 5.7.8 之后 支持 JSON (由rfc7159规定)数据类型,其能在字段中使用json 类型,做到了自动校验是否为json类型数据,否则插入数据会报异常:其次,储存json ...
- mysql的json函数
mysql5.7以上提供了一种新的字段格式json,大概是mysql想把非关系型和关系型数据库一口通吃,所以推出了这种非常好用的格式,这样,我们的很多基于mongoDb或者clickHouse的业务都 ...
- MySQL操作JSON
MySQL操作JSON 总所周知,mysql5.7以上提供了一种新的字段格式-json,大概是mysql想把非关系型和关系型数据库一口通吃,所以推出了这种非常好用的格式,这样,我们的很多基于mongo ...
- mysql存json将utf8编码 去掉,MySQL对JSON类型UTF-8编码导致中文乱码探讨
原文:https://www.cnblogs.com/CreateMyself/p/12587426.html 前言 继上文发表之后,结合评论意见并亲自验证最终发现是编码的问题,但是对于字符编码还是有 ...
- Android之网络编程利用PHP操作MySql插入数据(四)
因为最近在更新我的项目,就想着把自己在项目中用到的一些的简单的与网络交互的方法总结一下,所以最近Android网络编程方面的博文会比较多一些,我尽量以最简单的方法给大家分享,让大家明白易懂.如果有什么 ...
- MySQL对JSON类型UTF-8编码导致中文乱码探讨
继上文发表之后,结合评论意见并亲自验证最终发现是编码的问题,但是对于字符编码还是有点不解,于是乎,有了本文,我们来学习字符编码,在学习的过程中,我发现对于MySQL中JSON类型的编码导致数据中文出现 ...
- mysql varchar json_谈谈 MySQL 的 JSON 数据类型
MySQL 5.7 增加了 JSON 数据类型的支持,在之前如果要存储 JSON 类型的数据的话我们只能自己做 JSON.stringify() 和 JSON.parse() 的操作,而且没办法针对 ...
- java向MySQL插入当前时间的四种方式和java时间日期格式化的几种方法(案例说明)...
转载地址:http://www.devba.com/index.php/archives/4581.html java向MySQL插入当前时间的四种方式和java时间日期格式化的几种方法(案例说明); ...
- quit推不出mysql_cmd下使用mysql插入中文出现无法退出语句的情况!终极解决办法! 安装mysql详细教程。...
当你插入中文时遇到这种情况,始终无法退出. 当前数据库:网上下载的奇奇怪怪版本5.5 当前系统win10 当前CMD输入编码utf8 数据库编码utf8 表编码utf8 mysql> inser ...
最新文章
- 李宏毅强化学习完整笔记!开源项目《LeeDeepRL-Notes》发布
- 如何处理JSON中的特殊字符 介绍几种解决方案
- linux 软件安装 NOKEY问题
- 【分析】大数据爆破之年:在这5个领域“掘金”最靠谱
- swiper 上滑触发_四种方式快速实现上滑触底加载效果
- 南华大学java补考_关于2017年秋季学期学生补考报名及成绩复核的通知
- React开发(215):React中的Fragments的动机
- 中科大410分计算机排名第几,2021考研成绩发布:中科大400分无缘复试,中山大学321分登顶第二...
- Scala报错:error: overloaded method value logInfo with alternatives
- ecshop轻松实现不同商品调用不同模板
- 从Qt的图片文件传输来看Qt 中UDP的收发消息writeDatagram和readDatagram
- HTML网页设计基础——二维码名片
- 汇编语言学习笔记(【汇编语言】小甲鱼零基础汇编)
- xvidcore.dll not found 的解决办法
- HTML调用QQ临时会话
- 2017年信息学奥赛NOIP普及组试题
- Android的5样的调试信息
- 【评测】Alfa Aesar分子砌块
- 你有用过Type-C接口的手电筒吗?
- html后代元素选择器,怎么使用html5中的后代选择器?后代选择器的用法详解!
热门文章
- 山大继续教育计算机答案蒙版,2020年计算机一级Photoshop考试基础自测题与答案...
- 微信公众号申请需要哪些材料
- XIO: fatal IO error 25 (Inappropriate ioctl for device) on X server “localhost:13.0“
- 《从0到1》读书笔记第2章像1999 年那样狂欢第1记:小结及词汇解析
- 武田宣布就拟收购Shire plc签署优先短期贷款工具协议及次级银团贷款协议和过桥信贷协议第二次修订
- 发生内部错误。请与 microsoft 支持部门联系。_设计变更、工程签证、确认单、工程洽商、联系单、会签的是干啥的?有啥区别?...
- %1 不是有效的 Win32 应用程序。
- 【Android自动化测试】Robot Framework+adb框架(三)——L3公共层
- cv2.imshow无法正常显示图片,而是一闪而过解决办法
- 实习生如何在平淡无奇的工作中凸显自我价值?