【MySQL】JSON相关
2021/7/9 19:18:36
本文主要是介绍【MySQL】JSON相关,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
JSON_ARRAY函数 ,返回一个JSON数组,参数支持各种类型
mysql> SELECT JSON_ARRAY(1376, '字符', NULL, FALSE, NOW()); +-----------------------------------------------------------+ | JSON_ARRAY(1376, '字符', NULL, FALSE, NOW()) | +-----------------------------------------------------------+ | [1376, "字符", null, false, "2021-07-09 10:47:33.000000"] | +-----------------------------------------------------------+ 1 row in set (0.03 sec) mysql>
JSON_OBJECT函数,返回一个JSON对象,要求KV参数必须成双入参
mysql> SELECT JSON_OBJECT('name', '张三', 'gender', TRUE, 'age', 24); +--------------------------------------------------------+ | JSON_OBJECT('name', '张三', 'gender', TRUE, 'age', 24) | +--------------------------------------------------------+ | {"age": 24, "name": "张三", "gender": true} | +--------------------------------------------------------+ 1 row in set (0.03 sec) mysql>
JSON_QUOTE函数,追加双引号修饰
JSON_QUOTE(json_val)
案例
mysql> SELECT JSON_QUOTE('12321'), JSON_QUOTE('"12321"'), '12321',JSON_QUOTE('[1, 2, 3]'); +---------------------+-----------------------+-------+-------------------------+ | JSON_QUOTE('12321') | JSON_QUOTE('"12321"') | 12321 | JSON_QUOTE('[1, 2, 3]') | +---------------------+-----------------------+-------+-------------------------+ | "12321" | "\"12321\"" | 12321 | "[1, 2, 3]" | +---------------------+-----------------------+-------+-------------------------+ 1 row in set (0.02 sec) mysql>
JSON_UNQUOTE函数,移除双引号修饰
JSON_QUOTE(json_val)
CONVERT函数,将JSON字符串转换为JSON
CONVERT(json_string,JSON)
案例
mysql> SELECT CONVERT('{"NAME": "MIKE", "AGE": 29, "GENDER": true}', JSON); +--------------------------------------------------------------+ | CONVERT('{"NAME": "MIKE", "AGE": 29, "GENDER": true}', JSON) | +--------------------------------------------------------------+ | {"AGE": 29, "NAME": "MIKE", "GENDER": true} | +--------------------------------------------------------------+ 1 row in set (0.02 sec) mysql>
JSON_CONTAINS函数
JSON_CONTAINS(json_doc, val[, path])
查询json文档是否在指定path包含指定的数据,包含则返回1,否则返回0。
如果有参数为NULL或path不存在,则返回NULL。
-- 声明一个JSON字符串 SET @j = '{"a": 1, "b": 2, "c": {"d": 4}}'; -- 声明一个1的变量 SET @j2 = '1'; -- 查询JSON是否包含参数值函数(参数1 JSON字符串, 参数2 Value值, 参数3 Key值[语法格式:'$.keyname']) SELECT JSON_CONTAINS(@j, @j2, '$.a'); -- 查询的是JSON对象的a属性,a属性的值是1,符合函数的包含条件,所以返回1表示结果TRUE SELECT JSON_CONTAINS(@j, @j2, '$.b'); -- 查询的是JSON对象的b属性,a属性的值是2,不符合函数包含条件,所以返回0表示结果FALSE
结果:
+-------------------------------+ | JSON_CONTAINS(@j, @j2, '$.a') | +-------------------------------+ | 1 | +-------------------------------+ 1 row in set (0.06 sec) +-------------------------------+ | JSON_CONTAINS(@j, @j2, '$.b') | +-------------------------------+ | 0 | +-------------------------------+ 1 row in set (0.05 sec)
JSON_CONTAINS_PATH函数,查询是否存在一个或多个K键
JSON_CONTAINS_PATH(json_doc, one_or_all, path[, path] ...)
查询是否存在指定路径,存在则返回1,否则返回0。如果有参数为NULL,则返回NULL。
one_or_all只能取值"one"或"all",one表示只要有一个存在即可;all表示所有的都存在才行。
-- 定义一个JSON字符串 SET @j = '{"a": 1, "b": 2, "c": {"d": 4}}'; -- 查询是否包含a键和e键,只要存在其中一个就返回1表示结果TRUE SELECT JSON_CONTAINS_PATH(@j, 'one', '$.a', '$.e'); -- 查询是否包含a键和e键,必须全部存在才返回1表示结果TRUE SELECT JSON_CONTAINS_PATH(@j, 'all', '$.a', '$.e'); -- 查询是否包含c键下面的d键,只要存在其中一个就返回1表示结果TRUE SELECT JSON_CONTAINS_PATH(@j, 'one', '$.c.d'); -- 查询是否包含a键下面的d键,只要存在其中一个就返回1表示结果TRUE SELECT JSON_CONTAINS_PATH(@j, 'one', '$.a.d');
JSON_EXTRACT抽取JSON数据
JSON_EXTRACT(json_doc, path[, path] ...)
从json文档里抽取数据。如果有参数有NULL或path不存在,则返回NULL。
如果抽取出多个path,则返回的数据封闭在一个json array里。
-- 抽取参数一的JSON数组,取值是数组的索引1 SELECT JSON_EXTRACT('[10, 20, [30, 40]]', '$[1]'); -- 抽取多个,且合并成数组返回 SELECT JSON_EXTRACT('[10, 20, [30, 40]]', '$[1]', '$[0]'); -- 抽取索引2的全部元素 SELECT JSON_EXTRACT('[10, 20, [30, 40]]', '$[2][*]');
在MySQL5.7.9版本中,支持使用【->】代替JSON_EXRACT表示
在MySQL5.7.13+版本中,支持使用【->>】代替JSON_EXRACT和JSON_UNQUOTE表示
语法演变:
JSON_UNQUOTE( JSON_EXTRACT(column, path) ) JSON_UNQUOTE(column -> path) column->>path
JSON_KEYS 获取指定K键下的所有K值
JSON_KEYS(json_doc[, path])
获取json文档在指定路径下的所有键值,返回一个json array。
如果有参数为NULL或path不存在,则返回NULL。
-- 直接对这个JSON对象获取所有K键【无论是一个还是多个,返回的都是JSON数组】 SELECT JSON_KEYS('{"a": 1, "b": {"c": 30}}'); -- 获取B键下的C键 SELECT JSON_KEYS('{"a": 1, "b": {"c": 30}}', '$.b');
JSON_SEARCH 查询K键的索引
JSON_SEARCH(json_doc, one_or_all, search_str[, escape_char[, path] ...])
查询包含指定字符串的paths,并作为一个json array返回。
如果有参数为NUL或path不存在,则返回NULL。
one_or_all:"one"表示查询到一个即返回;"all"表示查询所有。
search_str:要查询的字符串。 可以用LIKE里的'%'或‘_’匹配。
path:在指定path下查。
-- 声明一个JSON数组 SET @j = '["abc", [{"k": "10"}, "def"], {"x":"abc"}, {"y":"bcd"}]'; -- 查询字符串‘abc’是否存在,如果不存在返回NULL,存在则返回所在的索引位置或者是K键名称,参数'one'表示查找第一个立刻返回(忽略后面相同的) SELECT JSON_SEARCH(@j, 'one', 'abc'); -- 查询字符串‘abc’是否存在,如果不存在返回NULL,存在则返回所在的索引位置或者是K键名称,参数'all'表示查找JSON对象中所有的 SELECT JSON_SEARCH(@j, 'all', 'abc');
这篇关于【MySQL】JSON相关的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-11-26怎么使用 nvm(Node Version Manager)下载并安装指定版本的 Node.js?-icode9专业技术文章分享
- 2024-11-26Vue CLI资料入门教程
- 2024-11-26Vue CLI资料入门教程
- 2024-11-26Vue3+Vite资料:新手入门教程详解
- 2024-11-26Vue3阿里系UI组件资料入门教程
- 2024-11-26Vue3的阿里系UI组件资料入门指南
- 2024-11-26Vue3公共组件资料详解与实战教程
- 2024-11-26Vue3公共组件资料详解与实战教程
- 2024-11-26Vue3核心功能响应式变量资料入门教程
- 2024-11-26Vue3核心功能响应式变量资料详解