"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');
JSon串在被串行化后保存在文件中,读取字符串时,是不能直接拿来用JSON.parse()解析为JSON 对象的。因为它是一个字符串,不是一个合法的JSON对象格式。例如下面的JSON串保存在文件中,读出来不能直接解析:
“{\”resourceId\”:\”dfead70e4ec5c11e43514000ced0cdcaf\”,\”properties\”:{\”process_id\”:\”process4\”,\”name\”:\”\”,\”documentation\”:\”\”,\”processformtemplate\”:\”\”}}”
这个串如果出现在代码中是没有问题的
在JS中快速转义JSON字符串。
手动转义小的JSON字符串比使用本机更快。
主要焦点是非常快速地检查不需要转义的字符串,同时还改善了转义自身或至少不低于JSON.stringify的条件。
运行基准测试( npm run benchmark )显示出以下好处:
节点./基准
JSON short non escaped x 2 , 884 , 878 ops/sec ± 2.25 % ( 95 runs sampled)
this short non escaped x 13 , 082 , 026 ops/sec ± 1.47 % ( 93 runs sampled)
JSON short full escape 1 x 2 , 768 , 607 ops/sec ± 1.85 % ( 86 runs sampled)
this short full es
由于有些数据内容字段格式不固定需要使用json存储,mysql在存储json时,存在中文会把\过滤掉,导致读取的数据有问题,
PHP5.4支持JSON_UNESCAPED_UNICODE这个参数,此参数是让中文字符在json_encode的时候不用转义
但在PHP5.3中,就得自己写个函数来实
//json中文处理
function json_encode_mb($array)
一般出现这种toString后json串里面带有转义字符的原因是往jsonObject中直接put了String类型的内容,比如jsonObject.put("key","dddddd")这样最后jsonObject.toString的时候就会吧字符串里的key都加上反斜杠,解决方法很简单jsonObject里不要直接放String类型的内容,要放jsonObject或者JsonArray进去,这样最后toString 的时候出来的就是标准的json格式举个例子把集合转成jsonArray放入jsonObj
本篇介绍在执行MySQL线上变更时遇到的问题,表现为"更新JSON字段时,实际更新的值与SQL语句中的值不一致,JSON格式错误";原因是MySQL对value的转义处理导致;
在 R 中执行一个SQL,涉及到双层JSON,也就是第二层的JSON包含一个转义符,\。用R的RMySQL 执行的时候第二层的转义符号会被去掉怎么办。如果我直接复制 statement 在SQL中可以执行成功。以下是测试数据UPDATE ANALYSIS SET POSITION_LIST = '[{"date":"20150512","listDatePosition":"[{\\"code\\...
从5.7.8开始,MySQL开始支持JSON类型,用于存储JSON数据。JSON类型的加入模糊了关系型数据库与NoSQL之间的界限,给日常开发也带来了很大的便利。这篇文章主要介绍一下MySQL中JSON类型的使用,主要参考MySQL手册:https://dev.mysql.com/doc/refman/8.0/en/......
结论:2、使用phpaddslashes是错误的。因为它不对应mysql或pgsql。PHP官方强烈建议使用对应mysql的mysqli_real_escape_string()和对应PostgreSQL的pg_escape_string()。http://php.net/manual/en/function.addslashes.php3、保存到数据库之前使用htmlspecialchars是...
用[N]代表JSON数组中的第N个元素。序号从0开始。
用[M to N]代表JSON数组中第M个至第N个元素。序号从0开始。
用.[*]通配符代表JSON对象的所有子元素。
用[*]通配符代表JSON数组的所有元素。
用**通配符代表用某字符开头或结尾的元素。
*通配符的查询:
mysql> SELECT JSON_EXTRACT('{"a":