2022-10-27 486
经过漫长的测试,即将整体迁移至Mysql8.0; Mysql8.0 对于Json操作新增/优化了很多相关Json的API操作。
阅读了一下官方文档,虽然绝大多数的JSON操作都是应用层完成,但是会一些Mysql的JSON语法,方便进行debug;选出基础的, 有价值的部分,供未来参考。
https://dev.mysql.com/doc/refman/8.0/en/json.html https://dev.mysql.com/doc/refman/8.0/en/json-utility-functions.html
//使用JSON_ARRAY方法定义JSON数组; SELECTJSON_ARRAY(1,"abc",NULL,TRUE,CURTIME()) //结果:[1,"abc",null,true,"11:30:24.000000"] //JSON_OBJECT方法定义JSON对象 SELECTJSON_OBJECT('id',87,'name','carrot') //结果{"id":87,"name":"carrot"} //数组与对象嵌套的场景; [99,{"id":"HK500","cost":75.99},["hot","cold"]]{"k1":"value","k2":[10,20]} //日期/时间类型定义 ["12:18:29.000000","2015-07-29","2015-07-2912:18:29.000000"] //JSON_QUOTE将JSON对象转义成String,就是将内部的符号进行转义,并整体包裹上双引号; JSON_QUOTE('"null"') //结果"\"null\"" //将JSON内容美化并输出; JSON_PRETTY() //可以将JSON/JSON内部的元素转化为其他数据类型; //如下将JSONjdoc中的id元素,转化为unsignedint; [https://dev.mysql.com/doc/refman/8.0/en/json.html#json-converting-between-types](https://dev.mysql.com/doc/refman/8.0/en/json.html#json-converting-between-types) ORDERBYCAST(JSON_EXTRACT(jdoc,'$.id')ASUNSIGNED);
合并JSON的操作 JSON_MERGE_PRESERVE() and JSON_MERGE_PATCH() 实际业务用的可能性很少;-> –>操作符,按照key 找值;区别在于 –>会去除包裹的”以及转义符号; 它的等价的Function形式是JSON_EXTRACT()。
//{"mascot":"Ourmascotisadolphinnamed\"Sakila\"."} mysql>SELECTcol->"$.mascot"FROMqtest; //结果:|"Ourmascotisadolphinnamed\"Sakila\"."| SELECTsentence->>"$.mascot"FROMfacts; //结果:|Ourmascotisadolphinnamed"Sakila".|
JSON Path expression上面 –> 后双引号中的内容就是所谓的JSON Path expression; 该语法是ECMAScript规范的一部分,所以前端程序员应该特别熟悉。
以下面这段JSON为例:
[3,{"a":[5,6],"b":10},[99,100]] $[0]=3; $[1]={"a":[5,6],"b":10}; $[2]=[99,100];
与此同时,[2] 并非标量, 进一步。
$[1].a=[5,6] $[1].a[1]=6 $[1].b=10; $[2][0]=99;
更进一步支持的语法特性$[n to m]
$[ 1 to 2] = [{"a": [5, 6], "b": 10}, [99, 100]] $[last-2 to last-1] = [3, {"a": [5, 6], "b": 10}]
总结一下;a .是代表所有的members in object; b []是代表所有的cells in array; c [prefix] ** suffix 是代表以prefix开始,以suffix为结束的所有路径;另外,MySQL 系列面试题和答案全部整理好了,微信搜索互联网架构师,在后台发送:2T,可以在线阅读。
//如上,应该可以用-->语法取代; mysql>SELECTJSON_EXTRACT('{"a":1,"b":2,"c":[3,4,5]}','$.*'); //[1,2,[3,4,5]] SELECTJSON_EXTRACT('{"a":1,"b":2,"c":[3,4,5]}','$.c[*]') //[3,4,5] SELECTJSON_EXTRACT('{"a":{"b":1},"c":{"b":2}}','$**.b'); //[1,2] SELECTJSON_EXTRACT('[1,2,3,4,5]','$[1to3]'); //[2,3,4] //JSON_SETJSON_INSERTJSON_REPLACEJSON_REMOVE SET@j='["a",{"b":[true,false]},[10,20]]'; SELECTJSON_SET(@j,'$[1].b[0]',1,'$[2][2]',2); //|["a",{"b":[1,false]},[10,20,2]] SELECTJSON_INSERT(@j,'$[1].b[0]',1,'$[2][2]',2); //["a",{"b":[true,false]},[10,20,2]] JSON_REPLACE(@j,'$[1].b[0]',1,'$[2][2]',2) //["a",{"b":[1,false]},[10,20]] SELECTJSON_REMOVE(@j,'$[2]','$[1].b[1]','$[1].b[1]'); //["a",{"b":[true]}]
JSON Table Functions 一个比较常见的场景是JSON数据本身是一个表的结构;JSON_TABLE(*expr*, *path* COLUMNS (*column_list*) [AS\] *alias*)。
SELECT*FROMJSON_TABLE('[{"a":"3"},{"a":2},{"b":1},{"a":0},{"a":[1,2]}]', ->"$[*]" ->COLUMNS( ->rowidFORORDINALITY, ->acVARCHAR(100)PATH"$.a"DEFAULT'111'ONEMPTYDEFAULT'999'ONERROR, ->ajJSONPATH"$.a"DEFAULT'{"x":333}'ONEMPTY, ->bxINTEXISTSPATH"$.b" ->) ->)AStt;
原文链接:https://77isp.com/post/10503.html
=========================================
https://77isp.com/ 为 “云服务器技术网” 唯一官方服务平台,请勿相信其他任何渠道。
数据库技术 2022-03-28
网站技术 2022-11-26
网站技术 2023-01-07
网站技术 2022-11-17
Windows相关 2022-02-23
网站技术 2023-01-14
Windows相关 2022-02-16
Windows相关 2022-02-16
Linux相关 2022-02-27
数据库技术 2022-02-20
抠敌 2023年10月23日
嚼餐 2023年10月23日
男忌 2023年10月22日
瓮仆 2023年10月22日
簿偌 2023年10月22日
扫码二维码
获取最新动态