- ubuntu12.04环境下使用kvm ioctl接口实现最简单的虚拟机
- Ubuntu 通过无线网络安装Ubuntu Server启动系统后连接无线网络的方法
- 在Ubuntu上搭建网桥的方法
- ubuntu 虚拟机上网方式及相关配置详解
CFSDN坚持开源创造价值,我们致力于搭建一个资源共享平台,让每一个IT人在这里找到属于你的精彩世界.
这篇CFSDN的博客文章MySQL处理JSON常见函数的使用由作者收集整理,如果你对这篇文章有兴趣,记得点赞哟.
官方文档:JSON Functions 。
Name | Description |
---|---|
JSON_APPEND() | Append data to JSON document |
JSON_ARRAY() | Create JSON array |
JSON_ARRAY_APPEND() | Append data to JSON document |
JSON_ARRAY_INSERT() | Insert into JSON array |
-> | Return value from JSON column after evaluating path; equivalent to JSON_EXTRACT(). |
JSON_CONTAINS() | Whether JSON document contains specific object at path |
JSON_CONTAINS_PATH() | Whether JSON document contains any data at path |
JSON_DEPTH() | Maximum depth of JSON document |
JSON_EXTRACT() | Return data from JSON document |
->> | Return value from JSON column after evaluating path and unquoting the result; equivalent to JSON_UNQUOTE(JSON_EXTRACT()). |
JSON_INSERT() | Insert data into JSON document |
JSON_KEYS() | Array of keys from JSON document |
JSON_LENGTH() | Number of elements in JSON document |
JSON_MERGE() | Merge JSON documents |
JSON_OBJECT() | Create JSON object |
JSON_QUOTE() | Quote JSON document |
JSON_REMOVE() | Remove data from JSON document |
JSON_REPLACE() | Replace values in JSON document |
JSON_SEARCH() | Path to value within JSON document |
JSON_SET() | Insert data into JSON document |
JSON_TYPE() | Type of JSON value |
JSON_UNQUOTE() | Unquote JSON value |
JSON_VALID() | Whether JSON value is valid |
。
MySQL里的json分为json array和json object。 $表示整个json对象,在索引数据时用下标(对于json array,从0开始)或键值(对于json object,含有特殊字符的key要用"括起来,比如$."my name").
例如:[3, {"a": [5, 6], "b": 10}, [99, 100]],那么:
$[0]:3 。
$[1]: {"a": [5, 6], "b": 10} 。
$[2] :[99, 100] 。
$[3] : NULL 。
$[1].a:[5, 6] 。
$[1].a[1]:6 。
$[1].b:10 。
$[2][0]:99 。
。
json中的数据可以用 =, <, <=, >, >=, <>, !=, and <=> 进行比较。但json里的数据类型可以是多样的,那么在不同类型之间进行比较时,就有优先级了,高优先级的要大于低优先级的(可以用JSON_TYPE()函数查看类型)。优先级从高到低如下:
BLOB BIT OPAQUE DATETIME TIME DATE BOOLEAN ARRAY OBJECT STRING INTEGER, DOUBLE NULL 。
。
3.1 创建函数 。
3.1.1 JSON_ARRAY 。
JSON_ARRAY(val1,val2,val3...) 。
生成一个包含指定元素的json数组.
1
2
3
4
5
6
|
mysql>
SELECT
JSON_ARRAY(1,
"abc"
,
NULL
,
TRUE
, CURTIME());
+
---------------------------------------------+
| JSON_ARRAY(1,
"abc"
,
NULL
,
TRUE
, CURTIME()) |
+
---------------------------------------------+
| [1,
"abc"
,
null
,
true
,
"11:30:24.000000"
] |
+
---------------------------------------------+
|
3.1.2 JSON_OBJECT 。
JSON_OBJECT(key1,val1,key2,val2...) 。
生成一个包含指定K-V对的json object。如果有key为NULL或参数个数为奇数,则抛错.
1
2
3
4
5
6
|
mysql>
SELECT
JSON_OBJECT(
'id'
, 87,
'name'
,
'carrot'
);
+
-----------------------------------------+
| JSON_OBJECT(
'id'
, 87,
'name'
,
'carrot'
) |
+
-----------------------------------------+
| {
"id"
: 87,
"name"
:
"carrot"
} |
+
-----------------------------------------+
|
3.1.3 JSON_QUOTE 。
JSON_QUOTE(json_val) 。
将json_val用"号括起来.
1
2
3
4
5
6
7
8
9
10
11
12
|
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]"
|
+
-------------------------+
|
3.1.4 CONVERT 。
CONVERT(json_string,JSON) 。
1
2
3
4
5
6
|
mysql>
select
CONVERT
(
'{"mail": "amy@gmail.com", "name": "Amy"}'
,JSON);
+
----------------------------------------------------------+
|
CONVERT
(
'{"mail": "amy@gmail.com", "name": "Amy"}'
,JSON) |
+
----------------------------------------------------------+
| {
"mail"
:
"amy@gmail.com"
,
"name"
:
"Amy"
} |
+
----------------------------------------------------------+
|
3.2 查询函数 。
3.2.1 JSON_CONTAINS 。
JSON_CONTAINS(json_doc, val[, path]) 。
查询json文档是否在指定path包含指定的数据,包含则返回1,否则返回0。如果有参数为NULL或path不存在,则返回NULL.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
|
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 |
+
-------------------------------+
|
3.2.2 JSON_CONTAINS_PATH 。
JSON_CONTAINS_PATH(json_doc, one_or_all, path[, path] ...) 。
查询是否存在指定路径,存在则返回1,否则返回0。如果有参数为NULL,则返回NULL.
one_or_all只能取值"one"或"all",one表示只要有一个存在即可;all表示所有的都存在才行.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
|
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 |
+
----------------------------------------+
|
3.2.3 JSON_EXTRACT 。
JSON_EXTRACT(json_doc, path[, path] ...) 。
从json文档里抽取数据。如果有参数有NULL或path不存在,则返回NULL。如果抽取出多个path,则返回的数据封闭在一个json array里.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
|
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] |
+
-----------------------------------------------+
|
在MySQL 5.7.9+里可以用"->"替代.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
|
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)
|
在MySQL 5.7.13+,还可以用"->>"表示去掉抽取结果的"号,下面三种效果是一样的:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
|
mysql>
SELECT
*
FROM
jemp
WHERE
g > 2;
+
-------------------------------+------+
| c | g |
+
-------------------------------+------+
| {
"id"
:
"3"
,
"name"
:
"Barney"
} | 3 |
| {
"id"
:
"4"
,
"name"
:
"Betty"
} | 4 |
+
-------------------------------+------+
2
rows
in
set
(0.01 sec)
mysql>
SELECT
c->
'$.name'
AS
name
->
FROM
jemp
WHERE
g > 2;
+
----------+
|
name
|
+
----------+
|
"Barney"
|
|
"Betty"
|
+
----------+
2
rows
in
set
(0.00 sec)
mysql>
SELECT
JSON_UNQUOTE(c->
'$.name'
)
AS
name
->
FROM
jemp
WHERE
g > 2;
+
--------+
|
name
|
+
--------+
| Barney |
| Betty |
+
--------+
2
rows
in
set
(0.00 sec)
mysql>
SELECT
c->>
'$.name'
AS
name
->
FROM
jemp
WHERE
g > 2;
+
--------+
|
name
|
+
--------+
| Barney |
| Betty |
+
--------+
2
rows
in
set
(0.00 sec)
|
3.2.4 JSON_KEYS 。
JSON_KEYS(json_doc[, path]) 。
获取json文档在指定路径下的所有键值,返回一个json array。如果有参数为NULL或path不存在,则返回NULL.
1
2
3
4
5
6
7
8
9
10
11
12
|
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"
] |
+
----------------------------------------------+
|
3.2.5 JSON_SEARCH 。
JSON_SEARCH(json_doc, one_or_all, search_str[, escape_char[, path] ...]) 。
查询包含指定字符串的paths,并作为一个json array返回。如果有参数为NUL或path不存在,则返回NULL.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
|
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"
|
+
-------------------------------------------+
|
3.3 修改函数 。
3.3.1 JSON_APPEND/JSON_ARRAY_APPEND 。
JSON_ARRAY_APPEND(json_doc, path, val[, path, val] ...) 。
在指定path的json array尾部追加val。如果指定path是一个json object,则将其封装成一个json array再追加。如果有参数为NULL,则返回NULL.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
|
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"
] |
+
---------------------------------+
|
3.3.2 JSON_ARRAY_INSERT 。
JSON_ARRAY_INSERT(json_doc, path, val[, path, val] ...) 。
在path指定的json array元素插入val,原位置及以右的元素顺次右移。如果path指定的数据非json array元素,则略过此val;如果指定的元素下标超过json array的长度,则插入尾部.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
|
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]] |
+
----------------------------------------------------+
|
3.3.3 JSON_INSERT/JSON_REPLACE/JSON_SET 。
JSON_INSERT(json_doc, path, val[, path, val] ...) 。
在指定path下插入数据,如果path已存在,则忽略此val(不存在才插入).
1
2
3
4
5
6
7
|
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_REPLACE(json_doc, path, val[, path, val] ...) 。
替换指定路径的数据,如果某个路径不存在则略过(存在才替换)。如果有参数为NULL,则返回NULL.
1
2
3
4
5
6
7
|
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] ...) 。
设置指定路径的数据(不管是否存在)。如果有参数为NULL,则返回NULL.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
|
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]} |
+
-----------------------------------------------------+
|
3.3.4 JSON_MERGE 。
JSON_MERGE(json_doc, json_doc[, json_doc] ...) 。
merge多个json文档。规则如下:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
|
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}] |
+
------------------------------------+
|
3.3.5 JSON_REMOVE 。
JSON_REMOVE(json_doc, path[, path] ...) 。
移除指定路径的数据,如果某个路径不存在则略过此路径。如果有参数为NULL,则返回NULL.
1
2
3
4
5
6
7
|
mysql>
SET
@j =
'["a", ["b", "c"], "d"]'
;
mysql>
SELECT
JSON_REMOVE(@j,
'$[1]'
);
+
-------------------------+
| JSON_REMOVE(@j,
'$[1]'
) |
+
-------------------------+
| [
"a"
,
"d"
] |
+
-------------------------+
|
3.3.6 JSON_UNQUOTE 。
JSON_UNQUOTE(val) 。
去掉val的引号。如果val为NULL,则返回NULL.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
|
mysql>
SET
@j =
'"abc"'
;
mysql>
SELECT
@j, JSON_UNQUOTE(@j);
+
-------+------------------+
| @j | JSON_UNQUOTE(@j) |
+
-------+------------------+
|
"abc"
| abc |
+
-------+------------------+
mysql>
SET
@j =
'[1, 2, 3]'
;
mysql>
SELECT
@j, JSON_UNQUOTE(@j);
+
-----------+------------------+
| @j | JSON_UNQUOTE(@j) |
+
-----------+------------------+
| [1, 2, 3] | [1, 2, 3] |
+
-----------+------------------+
|
3.4 JSON特性查询 。
3.4.1 JSON_DEEPTH 。
JSON_DEPTH(json_doc) 。
获取json文档的深度。如果参数为NULL,则返回NULL.
空的json array、json object或标量的深度为1.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
|
mysql>
SELECT
JSON_DEPTH(
'{}'
), JSON_DEPTH(
'[]'
), JSON_DEPTH(
'true'
);
+
------------------+------------------+--------------------+
| JSON_DEPTH(
'{}'
) | JSON_DEPTH(
'[]'
) | JSON_DEPTH(
'true'
) |
+
------------------+------------------+--------------------+
| 1 | 1 | 1 |
+
------------------+------------------+--------------------+
mysql>
SELECT
JSON_DEPTH(
'[10, 20]'
), JSON_DEPTH(
'[[], {}]'
);
+
------------------------+------------------------+
| JSON_DEPTH(
'[10, 20]'
) | JSON_DEPTH(
'[[], {}]'
) |
+
------------------------+------------------------+
| 2 | 2 |
+
------------------------+------------------------+
mysql>
SELECT
JSON_DEPTH(
'[10, {"a": 20}]'
);
+
-------------------------------+
| JSON_DEPTH(
'[10, {"a": 20}]'
) |
+
-------------------------------+
| 3 |
+
-------------------------------+
|
3.4.2 JSON_LENGTH 。
JSON_LENGTH(json_doc[, path]) 。
获取指定路径下的长度。如果参数为NULL,则返回NULL。 。
长度的计算规则:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
|
mysql>
SELECT
JSON_LENGTH(
'[1, 2, {"a": 3}]'
);
+
---------------------------------+
| JSON_LENGTH(
'[1, 2, {"a": 3}]'
) |
+
---------------------------------+
| 3 |
+
---------------------------------+
mysql>
SELECT
JSON_LENGTH(
'{"a": 1, "b": {"c": 30}}'
);
+
-----------------------------------------+
| JSON_LENGTH(
'{"a": 1, "b": {"c": 30}}'
) |
+
-----------------------------------------+
| 2 |
+
-----------------------------------------+
mysql>
SELECT
JSON_LENGTH(
'{"a": 1, "b": {"c": 30}}'
,
'$.b'
);
+
------------------------------------------------+
| JSON_LENGTH(
'{"a": 1, "b": {"c": 30}}'
,
'$.b'
) |
+
------------------------------------------------+
| 1 |
+
------------------------------------------------+
|
3.4.3 JSON_TYPE 。
JSON_TYPE(json_val) 。
获取json文档的具体类型。如果参数为NULL,则返回NULL.
3.4.4 JSON_VALID 。
JSON_VALID(val) 。
判断val是否为有效的json格式,是为1,不是为0。如果参数为NUL,则返回NULL.
1
2
3
4
5
6
7
8
9
10
11
12
|
mysql>
SELECT
JSON_VALID(
'{"a": 1}'
);
+
------------------------+
| JSON_VALID(
'{"a": 1}'
) |
+
------------------------+
| 1 |
+
------------------------+
mysql>
SELECT
JSON_VALID(
'hello'
), JSON_VALID(
'"hello"'
);
+
---------------------+-----------------------+
| JSON_VALID(
'hello'
) | JSON_VALID(
'"hello"'
) |
+
---------------------+-----------------------+
| 0 | 1 |
+
---------------------+-----------------------+
|
到此这篇关于MySQL处理JSON常见函数的使用的文章就介绍到这了,更多相关MySQL JSON常见函数内容请搜索我以前的文章或继续浏览下面的相关文章希望大家以后多多支持我! 。
原文链接:https://www.cnblogs.com/waterystone/p/5626098.html 。
最后此篇关于MySQL处理JSON常见函数的使用的文章就讲到这里了,如果你想了解更多关于MySQL处理JSON常见函数的使用的内容请搜索CFSDN的文章或继续浏览相关文章,希望大家以后支持我的博客! 。
对于 Metal ,如果对主纹理进行 mipmap 处理,是否还需要对多采样纹理进行 mipmap 处理?我阅读了苹果文档,但没有得到任何相关信息。 最佳答案 Mipmapping 适用于您将从中
我正在使用的代码在后端 Groovy 代码中具有呈现 GSP(Groovy 服务器页面)的 Controller 。对于前端,我们使用 React-router v4 来处理路由。我遇到的问题是,通过
我们正在 build 一个巨大的网站。我们正在考虑是在服务器端(ASP .Net)还是在客户端进行 HTML 处理。 例如,我们有 HTML 文件,其作用类似于用于生成选项卡的模板。服务器端获取 HT
我正在尝试将图像加载到 void setup() 中的数组中,但是当我这样做时出现此错误:“类型不匹配,'processing .core.PImage' does not匹配“processing.
我正在尝试使用其私有(private)应用程序更新 Shopify 上的客户标签。我用 postman 尝试过,一切正常,但通过 AJAX,它带我成功回调而不是错误,但成功后我得到了身份验证链接,而不
如何更改我的 Processing appIconTest.exe 导出的默认图标在窗口中的应用程序? 默认一个: 最佳答案 经过一些研究,我能找到的最简单的解决方案是: 进入 ...\process
我在 Processing 中做了一个简单的小游戏,但需要一些帮助。我有一个 mp3,想将它添加到我的应用程序中,以便在后台循环运行。 这可能吗?非常感谢。 最佳答案 您可以使用声音库。处理已经自带
我有几个这样创建的按钮: 在 setup() PImage[] imgs1 = {loadImage("AREA1_1.png"),loadImage("AREA1_2.png"),loadImage
我正在尝试使用 Processing 创建一个多人游戏,但无法弄清楚如何将屏幕分成两个以显示玩家的不同情况? 就像在 c# 中一样,我们有Viewport leftViewport,rightView
我一直在尝试使用 Moore 邻域在处理过程中创建元胞自动机,到目前为止非常成功。我已经设法使基本系统正常工作,现在我希望通过添加不同的功能来使用它。现在,我检查细胞是否存活。如果是,我使用 fill
有没有办法用 JavaScript 代码检查资源使用情况?我可以检查脚本的 RAM 使用情况和 CPU 使用情况吗? 由于做某事有多种方法,我可能会使用不同的方法编写代码,并将其保存为两个不同的文件,
我想弄清楚如何处理这样的列表: [ [[4,6,7], [1,2,4,6]] , [[10,4,2,4], [1]] ] 这是一个整数列表的列表 我希望我的函数将此列表作为输入并返回列表中没有重复的整
有没有办法在不需要时处理 MethodChannel/EventChannel ?我问是因为我想为对象创建多个方法/事件 channel 。 例子: class Call { ... fields
我有一个关于在 Python3 中处理 ConnectionResetError 的问题。这通常发生在我使用 urllib.request.Request 函数时。我想知道如果我们遇到这样的错误是否可
我一直在努力解决这个问题几个小时,但无济于事。代码很简单,一个弹跳球(粒子)。将粒子的速度初始化为 (0, 0) 将使其保持上下弹跳。将粒子的初始化速度更改为 (0, 0.01) 或任何十进制浮点数都
我把自己弄得一团糟。 我想在我的系统中添加 python3.6 所以我决定在我的 Ubuntu 19.10 中卸载现有的。但是现在每次我想安装一些东西我都会得到这样的错误: dpkg: error w
我正在努力解决 Rpart 包中的 NA 功能。我得到了以下数据框(下面的代码) Outcome VarA VarB 1 1 1 0 2 1 1 1
我将 Java 与 JSF 一起使用,这是 Glassfish 3 容器。 在我的 Web 应用程序中,我试图实现一个文件(图像)管理系统。 我有一个 config.properties我从中读取上传
所以我一直在Processing工作几个星期以来,虽然我没有编程经验,但我已经转向更复杂的项目。我正在编写一个进化模拟器,它会产生具有随机属性的生物。 最终,我将添加复制,但现在这些生物只是在屏幕上漂
有人知道 Delphi 2009 对“with”的处理有什么不同吗? 我昨天解决了一个问题,只是将“with”解构为完整引用,如“with Datamodule、Dataset、MainForm”。
我是一名优秀的程序员,十分优秀!