MySQL向MongoDB的妥协之JSON

MySQL在5.7.8版本中增加了对json数据的支持,而不再是需要使用字符串形式进行存储。下面简单介绍下MySQL对json的操作:

1、数据类型--json

MySQL使用的字段数据类型就是json,例如(字段test_json):

create table `test_json`(
    id int not null auto_increment primary key, 
    test_json json not null
);

2、MySQL的json相关函数

① json_array()

作用:将数组转化为json格式数据。

语法:

/*为下一行打辅助*/
json_array(value1[, value2[, value3[,...]]])

例如:

insert into `test_json` values (
    null,
    json_array('Alan','Jane','Jack','Rose')
);

结果:

+----+----------------------------------+
| id | test_json                        |
+----+----------------------------------+
|  1 | ["Alan", "Jane", "Jack", "Rose"] |
+----+----------------------------------+

② json_object()

作用:将对象转化为json格式数据。

语法:

/*为下一行打辅助*/
json_object(key1, value1[, key2, value2[, key3, value3[, ...]]]);

例如:

insert into `test_json` values (
    null,
    json_object('name', 'Alan', 'age', '18', 'desc', 'handsome')
);

结果:

+----+-------------------------------------------------+
| id | test_json                                       |
+----+-------------------------------------------------+
|  2 | {"age": 18, "desc": "handsome", "name": "Alan"} |
+----+-------------------------------------------------+

③ json_quote()

作用:将字符串转化为json数据格式(为字符串增加双引号以及为引号增加转义字符) 语法:

/*为下一行打辅助*/
json_quote(value);

例如:

insert into `test_json` values(
    null,
    json_quote("Hello World!")
),(
    null,
    json_quote('He say, "Hello World!"')
);

结果:

+----+----------------------------+
| id | test_json                  |
+----+----------------------------+
|  6 | "Hello World!"             |
|  7 | "He Say, \"Hello World!\"" |
+----+----------------------------+

④ json_unquote()

作用:与json_quote()作用相反 语法:

/*为下一行打辅助*/
json_unquote(value);

例如:

select id, json_unquote(test_json) as test_json 
from `test_json` 
where id=6 or id=7;

结果:

+----+------------------------+
| id | test_json              |
+----+------------------------+
|  6 | Hello World!           |
|  7 | He Say, "Hello World!" |
+----+------------------------+

⑤ json_merge()

作用:将多个json文本合并成一个json文本 语法:

/*助攻行*/
json_merge(json1, json2[,json3[, json4[, ...]]]);

例如:

insert into `test_json` values(
    null,
    json_merge('["Alan","Jane"]', '["Jack", "Rose"]', '["other"]')
);

结果:

+----+-------------------------------------------+
| id | test_json                                 |
+----+-------------------------------------------+
| 10 | ["Alan", "Jane", "Jack", "Rose", "other"] |
+----+-------------------------------------------+

⑥ json_valid()

作用:判断json格式是否正确 语法:

/*助攻行*/
json_valid(json);

例如:

/*助攻行*/
select *,json_valid(test_json) as IsValid from test_json;

结果:

+----+-------------------------------------------------+---------+
| id | test_json                                       | IsValid |
+----+-------------------------------------------------+---------+
|  1 | ["Alan", "Jane", "Jack", "Rose"]                |       1 |
|  2 | {"age": 18, "desc": "handsome", "name": "Alan"} |       1 |
|  4 | "Hello World!"                                  |       1 |
|  5 | "He Say, 'Hello World!'"                        |       1 |
|  6 | "Hello World!"                                  |       1 |
|  7 | "He Say, \"Hello World!\""                      |       1 |
|  8 | ["Alan", "Jane", "Jack", "Rose", "other"]       |       1 |
|  9 | ["Alan", "Jane", "Jack", "Rose", "other"]       |       1 |
| 10 | ["Alan", "Jane", "Jack", "Rose", "other"]       |       1 |
+----+-------------------------------------------------+---------+

⑦ json_type()

作用:判断json文本的数据类型 语法:

/*助攻行*/
json_type(jsonData);

例如:

/*助攻行*/
select *,json_type(test_json) as json_type from test_json;

结果:

+----+-------------------------------------------------+-----------+
| id | test_json                                       | json_type |
+----+-------------------------------------------------+-----------+
|  1 | ["Alan", "Jane", "Jack", "Rose"]                | ARRAY     |
|  2 | {"age": 18, "desc": "handsome", "name": "Alan"} | OBJECT    |
|  4 | "Hello World!"                                  | STRING    |
|  5 | "He Say, 'Hello World!'"                        | STRING    |
|  6 | "Hello World!"                                  | STRING    |
|  7 | "He Say, \"Hello World!\""                      | STRING    |
|  8 | ["Alan", "Jane", "Jack", "Rose", "other"]       | ARRAY     |
|  9 | ["Alan", "Jane", "Jack", "Rose", "other"]       | ARRAY     |
| 10 | ["Alan", "Jane", "Jack", "Rose", "other"]       | ARRAY     |
+----+-------------------------------------------------+-----------+

暂时只写这7个函数,MySQL还有许多关于json的函数,例如:json_append(), json_array_append(), json_array_insert(), json_insert(), json_remove(), json_replace(), json_set() 等

原创声明,本文系作者授权云+社区发表,未经许可,不得转载。

如有侵权,请联系 yunjia_community@tencent.com 删除。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏数据结构与算法

P1338 末日的传说

题目描述 只要是参加jsoi活动的同学一定都听说过Hanoi塔的传说:三根柱子上的金片每天被移动一次,当所有的金片都被移完之后,世界末日也就随之降临了。 在古老...

3199
来自专栏take time, save time

初级程序员面试不靠谱指南(五)

四、递归的第一次亲密接触     我经常会想,如果给没有学过计算机或者数学的人说递归这个词他们脑中会怎样理解这个词的意思。递归这个概念在面试中出现的概率大于85...

3498
来自专栏CVer

排序算法 | 快速排序(含C++/Python代码实现)

排序算法,就是使得序列按照一定要求排列的方法。排序算法有很多,本文将介绍面试中常常被问到的经典排序算法:快速排序,并分别利用C++和Python进行实现。

1400
来自专栏轮子工厂

八大排序算法稳定性分析,原来稳定性是这个意思...

2、在一趟选择中,如果当前元素比一个元素小,而该小的元素又出现在一个和当前元素相等的元素后面,那么交换后稳定性就被破坏了;

2396
来自专栏斑斓

编程修炼 | Scala中Stream的应用场景及其实现原理

假设一个场景需要在50个随机数中找到前两个可以被3整除的数字。听起来很简单,我们可以这样来写: def randomList = (1 to 50).map(_...

2925
来自专栏chenjx85的技术专栏

leetcode-561-Array Partition I

1947
来自专栏chenjx85的技术专栏

leetcode-605-Can Place Flowers

1043
来自专栏算法channel

LeetCode实战:子问题分析

主要推送关于对算法的思考以及应用的消息。培养思维能力,注重过程,挖掘背后的原理,刨根问底。本着严谨和准确的态度,目标是撰写实用和启发性的文章,欢迎您的关注。 记...

3589
来自专栏落影的专栏

程序员进阶之算法练习(十六)

前言 正文6道题目来自leetcode––为求职为生的编程网站,目的是工作闲暇之时锤炼代码功底。 没有捷径,但手熟尔; 一步领先,步步领先。 正文 5. L...

3955
来自专栏猿人谷

常见排序算法分析

一.常见排序算法的实现 1.冒泡排序 冒泡排序是非常容易理解和实现,,以从小到大排序举例: 设数组长度为N。 1.比较相邻的前后二个数据,如果前面数据大于后面...

2038

扫码关注云+社区

领取腾讯云代金券