博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
MySQL 5.7 reference about JSON
阅读量:4574 次
发布时间:2019-06-08

本文共 19671 字,大约阅读时间需要 65 分钟。

最近需要用到MySQL 5.7中的JSON,总结一下MySQL中关于JSON的内容

参考:

 

JSON_ARRAY([val[, val] ...])

构造并返回一个JSON数组

mysql> SELECT JSON_ARRAY(1, "abc", NULL, TRUE, CURTIME());+---------------------------------------------+| JSON_ARRAY(1, "abc", NULL, TRUE, CURTIME()) |+---------------------------------------------+| [1, "abc", null, true, "11:30:24.000000"]   |+---------------------------------------------+

 

JSON_OBJECT([key, val[, key, val] ...])

通过键值对列表返回一个JSON对象

mysql> SELECT JSON_OBJECT('id', 87, 'name', 'carrot');+-----------------------------------------+| JSON_OBJECT('id', 87, 'name', 'carrot') |+-----------------------------------------+| {"id": 87, "name": "carrot"}            |+-----------------------------------------+

 

JSON_QUOTE(json_val)

产生JSON字符串

mysql> SELECT JSON_QUOTE('null'), JSON_QUOTE('"null"');+--------------------+----------------------+| JSON_QUOTE('null') | JSON_QUOTE('"null"') |+--------------------+----------------------+| "null"             | "\"null\""           |+--------------------+----------------------+mysql> SELECT JSON_QUOTE('[1, 2, 3]');+-------------------------+| JSON_QUOTE('[1, 2, 3]') |+-------------------------+| "[1, 2, 3]"             |+-------------------------+

 

JSON_CONTAINS(json_doc, val[, path])

返回0 or 1来表示一个特定的值是否在目标JSON文档中

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] ...)

返回0 or 1来表示一个JSON文档是否包含一个或多个给定的数据

参数:

  • 'one': 1 if at least one path exists within the document, 0 otherwise.
  • 'all': 1 if all paths exist within the document, 0 otherwise.
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] ...)

从JSON文档返回数据,注意5.7.9以上用->代替

mysql> SELECT c, JSON_EXTRACT(c, "$.id"), g      > FROM jemp     > WHERE JSON_EXTRACT(c, "$.id") > 1      > ORDER BY JSON_EXTRACT(c, "$.name");+-------------------------------+-----------+------+| c                             | c->"$.id" | g    |+-------------------------------+-----------+------+| {"id": "3", "name": "Barney"} | "3"       |    3 || {"id": "4", "name": "Betty"}  | "4"       |    4 || {"id": "2", "name": "Wilma"}  | "2"       |    2 |+-------------------------------+-----------+------+3 rows in set (0.00 sec)mysql> SELECT c, c->"$.id", g      > FROM jemp     > WHERE c->"$.id" > 1      > ORDER BY c->"$.name";+-------------------------------+-----------+------+| c                             | c->"$.id" | g    |+-------------------------------+-----------+------+| {"id": "3", "name": "Barney"} | "3"       |    3 || {"id": "4", "name": "Betty"}  | "4"       |    4 || {"id": "2", "name": "Wilma"}  | "2"       |    2 |+-------------------------------+-----------+------+3 rows in set (0.00 sec)

 

->符号可以用在非select中,表示某个JSON key的value

mysql> ALTER TABLE jemp ADD COLUMN n INT;Query OK, 0 rows affected (0.68 sec)Records: 0  Duplicates: 0  Warnings: 0mysql> UPDATE jemp SET n=1 WHERE c->"$.id" = "4";Query OK, 1 row affected (0.04 sec)Rows matched: 1  Changed: 1  Warnings: 0mysql> SELECT c, c->"$.id", g, n      > FROM jemp     > WHERE JSON_EXTRACT(c, "$.id") > 1      > ORDER BY c->"$.name";+-------------------------------+-----------+------+------+| c                             | c->"$.id" | g    | n    |+-------------------------------+-----------+------+------+| {"id": "3", "name": "Barney"} | "3"       |    3 | NULL || {"id": "4", "name": "Betty"}  | "4"       |    4 |    1 || {"id": "2", "name": "Wilma"}  | "2"       |    2 | NULL |+-------------------------------+-----------+------+------+3 rows in set (0.00 sec)mysql> DELETE FROM jemp WHERE c->"$.id" = "4";Query OK, 1 row affected (0.04 sec)mysql> SELECT c, c->"$.id", g, n      > FROM jemp     > WHERE JSON_EXTRACT(c, "$.id") > 1      > ORDER BY c->"$.name";+-------------------------------+-----------+------+------+| c                             | c->"$.id" | g    | n    |+-------------------------------+-----------+------+------+| {"id": "3", "name": "Barney"} | "3"       |    3 | NULL || {"id": "2", "name": "Wilma"}  | "2"       |    2 | NULL |+-------------------------------+-----------+------+------+2 rows in set (0.00 sec)

 

->符号还可以用在json数组中

mysql> CREATE TABLE tj10 (a JSON, b INT);Query OK, 0 rows affected (0.26 sec)mysql> INSERT INTO tj10      > VALUES ("[3,10,5,17,44]", 33), ("[3,10,5,17,[22,44,66]]", 0);Query OK, 1 row affected (0.04 sec)mysql> SELECT a->"$[4]" FROM tj10;+--------------+| a->"$[4]"    |+--------------+| 44           || [22, 44, 66] |+--------------+2 rows in set (0.00 sec)mysql> SELECT * FROM tj10 WHERE a->"$[0]" = 3;+------------------------------+------+| a                            | b    |+------------------------------+------+| [3, 10, 5, 17, 44]           |   33 || [3, 10, 5, 17, [22, 44, 66]] |    0 |+------------------------------+------+2 rows in set (0.00 sec)

 

->符号如果没有匹配的key,可以用NULL表示

mysql> SELECT * FROM tj10 WHERE a->"$[4][1]" IS NOT NULL;+------------------------------+------+| a                            | b    |+------------------------------+------+| [3, 10, 5, 17, [22, 44, 66]] |    0 |+------------------------------+------+mysql> SELECT a->"$[4][1]" FROM tj10;+--------------+| a->"$[4][1]" |+--------------+| NULL         || 44           |+--------------+2 rows in set (0.00 sec)

 

JSON_KEYS(json_doc[, path])

列出所有KEY或指定KEY

mysql> SELECT JSON_KEYS('{"a": 1, "b": {"c": 30}}');+---------------------------------------+| JSON_KEYS('{"a": 1, "b": {"c": 30}}') |+---------------------------------------+| ["a", "b"]                            |+---------------------------------------+mysql> SELECT JSON_KEYS('{"a": 1, "b": {"c": 30}}', '$.b');+----------------------------------------------+| JSON_KEYS('{"a": 1, "b": {"c": 30}}', '$.b') |+----------------------------------------------+| ["c"]                                        |+----------------------------------------------+

 

JSON_SEARCH(json_doc, one_or_all, search_str[, escape_char[, path] ...])

查找元素,返回位置

  • 'one': The search terminates after the first match and returns one path string. It is undefined which match is considered first.

  • 'all': The search returns all matching path strings such that no duplicate paths are included. If there are multiple strings, they are autowrapped as an array. The order of the array elements is undefined.

mysql> SET @j = '["abc", [{"k": "10"}, "def"], {"x":"abc"}, {"y":"bcd"}]';mysql> SELECT JSON_SEARCH(@j, 'one', 'abc');+-------------------------------+| JSON_SEARCH(@j, 'one', 'abc') |+-------------------------------+| "$[0]"                        |+-------------------------------+mysql> SELECT JSON_SEARCH(@j, 'all', 'abc');+-------------------------------+| JSON_SEARCH(@j, 'all', 'abc') |+-------------------------------+| ["$[0]", "$[2].x"]            |+-------------------------------+mysql> SELECT JSON_SEARCH(@j, 'all', 'ghi');+-------------------------------+| JSON_SEARCH(@j, 'all', 'ghi') |+-------------------------------+| NULL                          |+-------------------------------+mysql> SELECT JSON_SEARCH(@j, 'all', '10');+------------------------------+| JSON_SEARCH(@j, 'all', '10') |+------------------------------+| "$[1][0].k"                  |+------------------------------+mysql> SELECT JSON_SEARCH(@j, 'all', '10', NULL, '$');+-----------------------------------------+| JSON_SEARCH(@j, 'all', '10', NULL, '$') |+-----------------------------------------+| "$[1][0].k"                             |+-----------------------------------------+mysql> SELECT JSON_SEARCH(@j, 'all', '10', NULL, '$[*]');+--------------------------------------------+| JSON_SEARCH(@j, 'all', '10', NULL, '$[*]') |+--------------------------------------------+| "$[1][0].k"                                |+--------------------------------------------+mysql> SELECT JSON_SEARCH(@j, 'all', '10', NULL, '$**.k');+---------------------------------------------+| JSON_SEARCH(@j, 'all', '10', NULL, '$**.k') |+---------------------------------------------+| "$[1][0].k"                                 |+---------------------------------------------+mysql> SELECT JSON_SEARCH(@j, 'all', '10', NULL, '$[*][0].k');+-------------------------------------------------+| JSON_SEARCH(@j, 'all', '10', NULL, '$[*][0].k') |+-------------------------------------------------+| "$[1][0].k"                                     |+-------------------------------------------------+mysql> SELECT JSON_SEARCH(@j, 'all', '10', NULL, '$[1]');+--------------------------------------------+| JSON_SEARCH(@j, 'all', '10', NULL, '$[1]') |+--------------------------------------------+| "$[1][0].k"                                |+--------------------------------------------+mysql> SELECT JSON_SEARCH(@j, 'all', '10', NULL, '$[1][0]');+-----------------------------------------------+| JSON_SEARCH(@j, 'all', '10', NULL, '$[1][0]') |+-----------------------------------------------+| "$[1][0].k"                                   |+-----------------------------------------------+mysql> SELECT JSON_SEARCH(@j, 'all', 'abc', NULL, '$[2]');+---------------------------------------------+| JSON_SEARCH(@j, 'all', 'abc', NULL, '$[2]') |+---------------------------------------------+| "$[2].x"                                    |+---------------------------------------------+mysql> SELECT JSON_SEARCH(@j, 'all', '%a%');+-------------------------------+| JSON_SEARCH(@j, 'all', '%a%') |+-------------------------------+| ["$[0]", "$[2].x"]            |+-------------------------------+mysql> SELECT JSON_SEARCH(@j, 'all', '%b%');+-------------------------------+| JSON_SEARCH(@j, 'all', '%b%') |+-------------------------------+| ["$[0]", "$[2].x", "$[3].y"]  |+-------------------------------+mysql> SELECT JSON_SEARCH(@j, 'all', '%b%', NULL, '$[0]');+---------------------------------------------+| JSON_SEARCH(@j, 'all', '%b%', NULL, '$[0]') |+---------------------------------------------+| "$[0]"                                      |+---------------------------------------------+mysql> SELECT JSON_SEARCH(@j, 'all', '%b%', NULL, '$[2]');+---------------------------------------------+| JSON_SEARCH(@j, 'all', '%b%', NULL, '$[2]') |+---------------------------------------------+| "$[2].x"                                    |+---------------------------------------------+mysql> SELECT JSON_SEARCH(@j, 'all', '%b%', NULL, '$[1]');+---------------------------------------------+| JSON_SEARCH(@j, 'all', '%b%', NULL, '$[1]') |+---------------------------------------------+| NULL                                        |+---------------------------------------------+mysql> SELECT JSON_SEARCH(@j, 'all', '%b%', '', '$[1]');+-------------------------------------------+| JSON_SEARCH(@j, 'all', '%b%', '', '$[1]') |+-------------------------------------------+| NULL                                      |+-------------------------------------------+mysql> SELECT JSON_SEARCH(@j, 'all', '%b%', '', '$[3]');+-------------------------------------------+| JSON_SEARCH(@j, 'all', '%b%', '', '$[3]') |+-------------------------------------------+| "$[3].y"                                  |+-------------------------------------------+
View Code

 

JSON_ARRAY_APPEND(json_doc, path, val[, path, val] ...)

在JSON数组指定位置追加元素,并返回结果

mysql> SET @j = '["a", ["b", "c"], "d"]';mysql> SELECT JSON_ARRAY_APPEND(@j, '$[1]', 1);+----------------------------------+| JSON_ARRAY_APPEND(@j, '$[1]', 1) |+----------------------------------+| ["a", ["b", "c", 1], "d"]        |+----------------------------------+mysql> SELECT JSON_ARRAY_APPEND(@j, '$[0]', 2);+----------------------------------+| JSON_ARRAY_APPEND(@j, '$[0]', 2) |+----------------------------------+| [["a", 2], ["b", "c"], "d"]      |+----------------------------------+mysql> SELECT JSON_ARRAY_APPEND(@j, '$[1][0]', 3);+-------------------------------------+| JSON_ARRAY_APPEND(@j, '$[1][0]', 3) |+-------------------------------------+| ["a", [["b", 3], "c"], "d"]         |+-------------------------------------+mysql> SET @j = '{"a": 1, "b": [2, 3], "c": 4}';mysql> SELECT JSON_ARRAY_APPEND(@j, '$.b', 'x');+------------------------------------+| JSON_ARRAY_APPEND(@j, '$.b', 'x')  |+------------------------------------+| {"a": 1, "b": [2, 3, "x"], "c": 4} |+------------------------------------+mysql> SELECT JSON_ARRAY_APPEND(@j, '$.c', 'y');+--------------------------------------+| JSON_ARRAY_APPEND(@j, '$.c', 'y')    |+--------------------------------------+| {"a": 1, "b": [2, 3], "c": [4, "y"]} |+--------------------------------------+mysql> SET @j = '{"a": 1}';mysql> SELECT JSON_ARRAY_APPEND(@j, '$', 'z');+---------------------------------+| JSON_ARRAY_APPEND(@j, '$', 'z') |+---------------------------------+| [{"a": 1}, "z"]                 |+---------------------------------+
View Code

 

JSON_ARRAY_INSERT(json_doc, path, val[, path, val] ...)

在JSON数组指定位置插入元素,并返回结果

mysql> SET @j = '["a", {"b": [1, 2]}, [3, 4]]';mysql> SELECT JSON_ARRAY_INSERT(@j, '$[1]', 'x');+------------------------------------+| JSON_ARRAY_INSERT(@j, '$[1]', 'x') |+------------------------------------+| ["a", "x", {"b": [1, 2]}, [3, 4]]  |+------------------------------------+mysql> SELECT JSON_ARRAY_INSERT(@j, '$[100]', 'x');+--------------------------------------+| JSON_ARRAY_INSERT(@j, '$[100]', 'x') |+--------------------------------------+| ["a", {"b": [1, 2]}, [3, 4], "x"]    |+--------------------------------------+mysql> SELECT JSON_ARRAY_INSERT(@j, '$[1].b[0]', 'x');+-----------------------------------------+| JSON_ARRAY_INSERT(@j, '$[1].b[0]', 'x') |+-----------------------------------------+| ["a", {"b": ["x", 1, 2]}, [3, 4]]       |+-----------------------------------------+mysql> SELECT JSON_ARRAY_INSERT(@j, '$[2][1]', 'y');+---------------------------------------+| JSON_ARRAY_INSERT(@j, '$[2][1]', 'y') |+---------------------------------------+| ["a", {"b": [1, 2]}, [3, "y", 4]]     |+---------------------------------------+mysql> SELECT JSON_ARRAY_INSERT(@j, '$[0]', 'x', '$[2][1]', 'y');+----------------------------------------------------+| JSON_ARRAY_INSERT(@j, '$[0]', 'x', '$[2][1]', 'y') |+----------------------------------------------------+| ["x", "a", {"b": [1, 2]}, [3, 4]]                  |+----------------------------------------------------+
View Code

JSON_INSERT(json_doc, path, val[, path, val] ...)

若键值对不在JSON对象中,则插入并返回

mysql> SET @j = '{ "a": 1, "b": [2, 3]}';mysql> SELECT JSON_INSERT(@j, '$.a', 10, '$.c', '[true, false]');+----------------------------------------------------+| JSON_INSERT(@j, '$.a', 10, '$.c', '[true, false]') |+----------------------------------------------------+| {"a": 1, "b": [2, 3], "c": "[true, false]"}        |+----------------------------------------------------+

 

JSON_MERGE(json_doc, json_doc[, json_doc] ...)

合并json数据并返回结果

mysql> SELECT JSON_MERGE('[1, 2]', '[true, false]');+---------------------------------------+| JSON_MERGE('[1, 2]', '[true, false]') |+---------------------------------------+| [1, 2, true, false]                   |+---------------------------------------+mysql> SELECT JSON_MERGE('{"name": "x"}', '{"id": 47}');+-------------------------------------------+| JSON_MERGE('{"name": "x"}', '{"id": 47}') |+-------------------------------------------+| {"id": 47, "name": "x"}                   |+-------------------------------------------+mysql> SELECT JSON_MERGE('1', 'true');+-------------------------+| JSON_MERGE('1', 'true') |+-------------------------+| [1, true]               |+-------------------------+mysql> SELECT JSON_MERGE('[1, 2]', '{"id": 47}');+------------------------------------+| JSON_MERGE('[1, 2]', '{"id": 47}') |+------------------------------------+| [1, 2, {"id": 47}]                 |+------------------------------------+

 

JSON_REMOVE(json_doc, path[, path] ...)

删除并返回结果

mysql> SET @j = '["a", ["b", "c"], "d"]';mysql> SELECT JSON_REMOVE(@j, '$[1]');+-------------------------+| JSON_REMOVE(@j, '$[1]') |+-------------------------+| ["a", "d"]              |+-------------------------+

 

JSON_REPLACE(json_doc, path, val[, path, val] ...)

替换并返回结果,如果不存在则无操作

mysql> SET @j = '{ "a": 1, "b": [2, 3]}';mysql> SELECT JSON_REPLACE(@j, '$.a', 10, '$.c', '[true, false]');+-----------------------------------------------------+| JSON_REPLACE(@j, '$.a', 10, '$.c', '[true, false]') |+-----------------------------------------------------+| {"a": 10, "b": [2, 3]}                              |+-----------------------------------------------------+

 

JSON_SET(json_doc, path, val[, path, val] ...)

set insert replace三者比较

  • JSON_SET() replaces existing values and adds nonexisting values.
  • JSON_INSERT() inserts values without replacing existing values.
  • JSON_REPLACE() replaces only existing values.
mysql> SET @j = '{ "a": 1, "b": [2, 3]}';mysql> SELECT JSON_SET(@j, '$.a', 10, '$.c', '[true, false]');+-------------------------------------------------+| JSON_SET(@j, '$.a', 10, '$.c', '[true, false]') |+-------------------------------------------------+| {"a": 10, "b": [2, 3], "c": "[true, false]"}    |+-------------------------------------------------+mysql> SELECT JSON_INSERT(@j, '$.a', 10, '$.c', '[true, false]');+----------------------------------------------------+| JSON_INSERT(@j, '$.a', 10, '$.c', '[true, false]') |+----------------------------------------------------+| {"a": 1, "b": [2, 3], "c": "[true, false]"}        |+----------------------------------------------------+mysql> SELECT JSON_REPLACE(@j, '$.a', 10, '$.c', '[true, false]');+-----------------------------------------------------+| JSON_REPLACE(@j, '$.a', 10, '$.c', '[true, false]') |+-----------------------------------------------------+| {"a": 10, "b": [2, 3]}                              |+-----------------------------------------------------+

 

 返回JSON相关属性,不常用,直接参考文档

 

转载于:https://www.cnblogs.com/raichen/p/5129619.html

你可能感兴趣的文章
Hibernate基础知识
查看>>
20150518 字符设备驱动
查看>>
UIView的动画之初步学习
查看>>
中小企业实施OA的意义
查看>>
es6 数组
查看>>
JS判断是否在微信浏览器打开
查看>>
javascript中typeof和instanceof的区别
查看>>
数据结构-数组1
查看>>
jquery之别踩白块游戏的实现
查看>>
转载Eclipse中Maven WEB工程tomcat项目添加调试
查看>>
caller和callee的解析与使用-型参与实参的访问
查看>>
[转]JavaScript线程运行机制
查看>>
日期时间处理函数收集
查看>>
HDOJ树形DP专题之Anniversary party
查看>>
设计师 商业
查看>>
算法(例子)
查看>>
python操作Memcache
查看>>
凶猛现金贷背后的欲望深渊:女子网上撸81只猫,欠下70万元债
查看>>
IOS之KVC机制(Object-C篇)
查看>>
CommonJS规范
查看>>