文章目录
12.18.1 MySQL 的 JSON 函数概览
->
# 计算路径后,从 JSON 列返回值,相当于 JSON_EXTRACT()
->>
# 计算路径并取消引用结果后,从JSON列返回值,相当于 JSON_UNQUOTE(JSON_EXTRACT())
JSON_APPEND()
# 插入数据到 JSON 文档中
JSON_ARRAY()
# 创建 JSON 数组
JSON_ARRAY_APPEND()
# 插入数据到 JSON 文档中
JSON_ARRAY_INSERT()
# 插入数据到 JSON 数组中
JSON_CONTAINS()
# 查询 JSON 文档在路径处,是否包含具体对象
JSON_CONTAINS_PATH()
# 查询 JSON 文档在路径处,是否包含任意数据
JSON_DEPTH()
# 查询 JSON 文档的最大深度值
JSON_EXTRACT()
# 查询 JSON 文档中的数据
JSON_INSERT()
# 插入数据到 JSON 文档中
JSON_KEYS()
# 查询 JSON 文档中的数组的键
JSON_LENGTH()
# 查询 JSON 文档中的元素数量
JSON_MERGE()
# 合并 JSON 文档,保留重复的键值,JSON_MERGE_PRESERVE() 的不推荐同义词
# 适用版本 >=5.7.22
JSON_MERGE_PRESERVE()
# 合并 JSON 文档,保留重复的键值
# 适用版本 >=5.7.22
JSON_MERGE_PATCH()
# 合并 JSON 文档,替换重复的键值
# 适用版本 >=5.7.22
JSON_OBJECT()
# 创建 JSON 对象
JSON_PRETTY()
# 以可读格式打印 JSON 文档
# 适用版本 >=5.7.22
JSON_QUOTE()
# 引用 JSON 文档
JSON_REMOVE()
# 删除 JSON 文档中的数据
JSON_REPLACE()
# 替换 JSON 文档中的数据的值
JSON_SEARCH()
# 查询 JSON 文档中值的路径
JSON_SET()
# 插入数据到 JSON 文档中
JSON_STORAGE_SIZE()
# 用于存储 JSON 文档二进制表示形式的空间
# 适用版本 >=5.7.22
JSON_TYPE()
# 查询 JSON 值的类型
JSON_UNQUOTE()
# 取消引用 JSON 值
JSON_VALID()
# 查询 JSON 值是否有效
MySQL 5.7.22 以及更高版本支持2个聚合 JSON 函数 JSON_ARRAYAGG() 和 JSON_OBJECTAGG().。
可查看第 12.20 章节详细介绍,Aggregate Functions
从 MySQL 5.7.22 开始:
- 可以使用 JSON_pretty() 函数以易于阅读的格式“漂亮地打印” JSON 值。
- 可以使用 JSON_storage_SIZE() 查看给定 JSON 值占用的存储空间。
完整详细的描述,可以查看 12.18.6 章节,JSON Utility Functions 。
12.18.2 创建值的 JSON 函数 Create
12.18.3 查询值的 JSON 函数 Search
这章节的函数是对 JSON 值进行搜索操作,从中提取数据。返回数据是否存在于某路径,或者返回数据的路径。
JSON_CONTAINS(target, candidate[, path])
mysql> SET @j = '{"a": 1, "b": 2, "c": {"d": 4}}';
mysql> SET @j2 = '1';
mysql> SELECT JSON_CONTAINS(@j, @j2, '$.a');
+-------------------------------+
| JSON_CONTAINS(@j, @j2, '$.a') |
+-------------------------------+
| 1 |
+-------------------------------+
mysql> SELECT JSON_CONTAINS(@j, @j2, '$.b');
+-------------------------------+
| JSON_CONTAINS(@j, @j2, '$.b') |
+-------------------------------+
| 0 |
+-------------------------------+
mysql> SET @j2 = '{"d": 4}';
mysql> SELECT JSON_CONTAINS(@j, @j2, '$.a');
+-------------------------------+
| JSON_CONTAINS(@j, @j2, '$.a') |
+-------------------------------+
| 0 |
+-------------------------------+
mysql> SELECT JSON_CONTAINS(@j, @j2, '$.c');
+-------------------------------+
| JSON_CONTAINS(@j, @j2, '$.c') |
+-------------------------------+
| 1 |
+-------------------------------+
JSON_CONTAINS_PATH(json_doc, one_or_all, path[, path] ...)
mysql> SET @j = '{"a": 1, "b": 2, "c": {"d": 4}}';
mysql> SELECT JSON_CONTAINS_PATH(@j, 'one', '$.a', '$.e');
+---------------------------------------------+
| JSON_CONTAINS_PATH(@j, 'one', '$.a', '$.e') |
+---------------------------------------------+
| 1 |
+---------------------------------------------+
mysql> SELECT JSON_CONTAINS_PATH(@j, 'all', '$.a', '$.e');
+---------------------------------------------+
| JSON_CONTAINS_PATH(@j, 'all', '$.a', '$.e') |
+---------------------------------------------+
| 0 |
+---------------------------------------------+
mysql> SELECT JSON_CONTAINS_PATH(@j, 'one', '$.c.d');
+----------------------------------------+
| JSON_CONTAINS_PATH(@j, 'one', '$.c.d') |
+----------------------------------------+
| 1 |
+----------------------------------------+
mysql> SELECT JSON_CONTAINS_PATH(@j, 'one', '$.a.d');
+----------------------------------------+
| JSON_CONTAINS_PATH(@j, 'one', '$.a.d') |
+----------------------------------------+
| 0 |
+----------------------------------------+
JSON_EXTRACT(json_doc, path[, path] ...)
mysql> SELECT JSON_EXTRACT('[10, 20, [30, 40]]', '$[1]');
+--------------------------------------------+
| JSON_EXTRACT('[10, 20, [30, 40]]', '$[1]') |
+--------------------------------------------+
| 20 |
+--------------------------------------------+
mysql> SELECT JSON_EXTRACT('[10, 20, [30, 40]]', '$[1]', '$[0]');
+----------------------------------------------------+
| JSON_EXTRACT('[10, 20, [30, 40]]', '$[1]', '$[0]') |
+----------------------------------------------------+
| [20, 10] |
+----------------------------------------------------+
mysql> SELECT JSON_EXTRACT('[10, 20, [30, 40]]', '$[2][*]');
+-----------------------------------------------+
| JSON_EXTRACT('[10, 20, [30, 40]]', '$[2][*]') |
+-----------------------------------------------+
| [30, 40] |
+-----------------------------------------------+