MySQL8 JSON

news/2024/11/15 5:56:10/

MySQL8 JSON 语法

本章主要讲解 MySQL8 数据库的 JSON 数据类型和相关的 JSON 语法,例如使用 JSON 函数进行创建、修改、搜索和查看属性等操作,以下每一个 JSON 函数都有一个在线示例可以参考,不同的在线示例根据作用进行分类介绍。

1. JSON 创建

1.1 json_array 函数

1.1.1创建一个 JSON 数组

select json_array(123, 'try8', null, false); 

1.2 json_object 函数

1.2.1 创建一个 JSON 对象

select json_object('try8_id', 1, 'try8_name', '试试吧'); 

1.3 json_quote 函数

1.3.1 通过双引号创建一个 JSON 字符串

select json_quote('"null"');

1.4 json_arrayagg 函数

通过指定列或者表达式的值聚合成一个 JSON 数组

select try8_col1, json_arrayagg(try8_col2) from try8_tb group by try8_col1;

1.5 json_objectagg 函数

1.5.1 通过指定列或者表达式的值聚合成一个 JSON 对象

select try8_name, json_objectagg(try8_col1, try8_col2) from try8_tb group by try8_name;

2 JSON 搜索

2.1 json_contains 函数

2.1.2 检查一个 JSON 文档是否包含另外一个 JSON 文档

select json_contains('[1, 2, {"try8": 3}]', '1')

2.2 json_contains_path 函数

2.2.1 检查一个 JSON 文档在指定的路径上是否有值存在

2.2.1.1 one 参数:至少存在一个路径则返回 1
select json_contains_path('{"a": 1, "b": 2, "c": {"d": 4}}', 'one', '$.a', '$.b');
2.2.1.2 all 参数:如果存在全部路径则返回 1
select json_contains_path('{"a": 1, "b": 2, "c": {"d": 4}}', 'all', '$.a', '$.e');

2.3 json_extract 函数

2.3.1 在 JSON 文档中提取并返回路径表达式指定的数据

select json_extract('[1, 2, {"try8": 3}]', '$[2]');

2.4 -> 和 ->> 运算符

2.4.1 返回带双引号的结果

select try8_col->'$.json_col' from try8_tb where 1 = 1;

2.4.2 返回不带双引号的结果

select try8_col->>'$.json_col' from try8_tb where 1 = 1;

2.5 json_keys 函数

2.5.1 返回指定 JSON 对象最上层键成员的数组

select json_keys('{"x": 1, "y": 2, "z": 3}');

2.6 json_overlaps 函数

2.6.1 检测 2 个 JSON 文档是否拥有相同的键值对或数组

select json_overlaps('[1, 2, 3]', '[3, 4, 5]');

2.7 json_search 函数

2.7.1 返回一个给定字符串在一个 JSON 文档中的路径

select json_search('{"x": 1, "y": 2}', 'one', '1'), json_search('{"x": 1, "y": 2}', 'all', '1');

2.8 json_value 函数

2.8.1 从一个给定 JSON 文档中提取并返回指定路径的值

select json_value('[{"id": 1, "name": "try8_1"}, {"id": 2, "name": "try8_2"}]', '$[0].name');

2.9 member of 函数

2.9.1 检查一个指定的值是否是一个 JSON 数组中的元素

select 1 member of('[1, "a"]'), 'a' member of('[1, "a"]');

3 JSON 修改

3.1 json_array_append 函数

3.1.1 将指定的 JSON 数组最后位置追加一个值并返回修改后的 JSON 文档

3.1.2 为当前 JSON 文档追加

select json_array_append('[1, 2, 3]', '$', 4);

3.1.3 为指定路径的 JSON 文档追加

select json_array_append('1, [2, 3]', '$[1]', 4);

3.1.4 为指定元素的 JSON 文档追加

select json_array_append('{"name": ["hello"]}', '$.name', "try8");

3.2 json_array_insert 函数

3.2.1 将指定的 JSON 数组指定位置插入一个值并返回修改后的 JSON 文档

select json_array_insert('[1, [2, 3]]', '$[0]', 0);

3.3 json_insert 函数

3.3.1 将指定的 JSON 文档插入数据并返回修改后的 JSON 文档

select json_insert('[1, [2, 3], {"a": [4, 5]}]', '$[3]', 6);

3.4 json_merge 函数

3.4.1 合并多个 JSON 文档并返回合并后的 JSON 文档

select json_merge('[1, 2]', '[2, 3]', '[3, 4, 5]');

3.5 json_merge_patch 函数

3.5.1 替换合并多个 JSON 文档并返回合并后的 JSON 文档

select json_merge_patch('{"x": 1, "z": 3}', '{"x": 2, "y": 3}');

3.6 json_merge_preserve 函数

3.6.1 合并多个 JSON 文档并返回结果,支持合并数组、对象和纯值

3.6.2 合并数组

select json_merge_preserve('[1, 2]', '[2, 3]', '[3, 4, 5]');

3.6.3 合并对象

select json_merge_preserve('{"x": 1}', '{"x": 2, "y": 3}');

3.6.4 合并纯值

select json_merge_preserve('1', 'true', '"hello"', 'null');

3.6.5 合并数组和对象示例

select json_merge_preserve('{"x": 1}', '[1, 2, 3]');

3.7 json_remove 函数

3.7.1 从一个 JSON 文档中删除指定数据并返回新的 JSON 文档

3.7.1.1 从数组中删除
select json_remove('[0, 1, 2, [3, 4]]', '$[0]', '$[2]');
3.7.1.2 从对象中删除
select json_remove('{"x": 1, "y": 2}', '$.x');

3.8 json_replace 函数

3.8.1 从一个 JSON 文档中替换已存在的数据并返回新的 JSON 文档

select json_replace('[1, [2, 3]]', '$[0]', 0);

3.9 json_set 函数

3.9.1 从一个 JSON 文档中插入或替换数据并返回新的 JSON 文档

select json_set('{"x": 1}', '$.x', '10', '$.y', '20');

3.10 json_unquote 函数

3.10.1 从一个 JSON 文档中取消双引号并返回新的 JSON 文档

select json_unquote('"try8"');

4 JSON 属性

4.1 json_depth 函数

4.1.1 返回 JSON 文档最大的深度

select json_depth('{}');

4.2 json_length 函数

4.2.1 返回 JSON 文档的长度

select json_depth('{"try8": "试试吧"}');

4.3 json_type 函数

4.3.1 返回 JSON 文档的类型

select json_type('{"try8": "试试吧"}');

4.4 json_valid 函数

4.4.1 检测 JSON 文档有效性

select json_valid('{"try8": "试试吧"}');

http://www.ppmy.cn/news/761372.html

相关文章

他在腾讯开会可以睡觉,年薪却超3个亿

百度,阿里巴巴,腾讯被称为“互联网三巨头”,百度公司的百度搜索引擎是世界上第一个中文搜索引擎,在国内市场占有率达到77.53%,排名第一,可见百度是互联网发展中的一个标杆;阿里巴巴公司的网上商…

最近好忙啊!~

做的时候越来越觉得自己的能力不够,学习的东西不够多. 不知道其他的人都是怎么过来的,我好想找一个经历过很多的人来聊聊天 一句话说的好:管理比技术难很多 唉,下面的路该怎么走那!~

最近忙什么呢

老朋友上线,第一句话一般都会问:“最近忙什么呢?” 忙什么呢?想想自己确实一点不忙。起床,按时上班,一天轻松的工作,按时下班,吃饭看电视上上网,早早睡觉。这就是我目前…

我人傻掉了!从腾讯辞职后找不到工作,投了20多家简历,却只面过一家。

题主2019年非985/211非计算机专业本科毕业(野生程序员),之前在腾讯实习了半年多毕业后在腾讯工作了一年 年中的时候因个人原因,打算离开腾讯,到外面看看,投了若干简历,最终面试了字节跳动、虾皮…

华为其实并不太忙

(1) 华为人均劳动生产率不要说无法和国外巨头们相比;在国内,也只是UT和中兴的2/3左右,你能很忙吗? (2) 华为是个彻头彻尾的高科技公司,生产人员只有10%左右,生产线已经完全流程化和自动化,你能很忙吗? (3) 华为的品牌在国内是老大哥,和国际巨头也可以分庭抗礼,…

微信与企业微信的十个区别

微信,是腾讯公司推出的一个为智能终端提供即时通讯服 务的免费应用程序。企业微信,是腾讯微信团队为企业打 造的高效办公平台 改版说两句: 微信改版:让大家慢慢的成为一个孤岛,毕竟以后仅聊天 了 企微改版&#…

这几天有点忙

昨天因为出差回来,没有去公司,也没有上网,所以blog日志也没有写。 今天刚刚到公司,忙着写出差报告,晚上还要开会,讨论带回来的最新需求。写了半天的出差报告,提交上去给头儿看,结果…

群里最近很忙

CPSD项目计划书 一、计划概述:简介:CPSD(China PHP SofWare Development.中国PHP软件开发)组织,是一个致力于服务中国PHP程序员的组织。市场定位:所有PHP的程序员。CPSD为该群体提供完善的信息服务与支持,为该群体营造一个宽松惬意…