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": "试试吧"}');