浅谈JSON DATA TYPE

在 MySQL中,直至 5.7 版本中,才正式引入 JSON数据类型。在此之前,我们通常使varchar或text数据类型存储JSON格式数据。

1 JSON数据类型的好处

  • JSON数据类型,会自动校验数据是否为JSON格式,如果不是JSON格式数据,则会报错。
  • MySQL提供了一组操作JSON数据的内置函数。
  • 优化的存储格式,存储在JSON列中的JSON数据被转换成内部的存储格式。其允许快速读取。
  • 可以修改特定的键值。

2 JSON

JSON数组包含一个由逗号分隔的值列表,并包含在 字符[and]字符中:

["abc", 10, null, true, false]

JSON对象包含一组由逗号分隔的键值对,并包含在字符{and}字符中,JSON对象中的键必须是字符串:

{"k1": "value", "k2": 10}

在JSON数组元素和JSON对象键值中允许嵌套:

[99, {"id": "HK500", "cost": 75.99}, ["hot", "cold"]]
{"k1": "value", "k2": [10, 20]}

在MySQL中,JSON值被写为字符串。MySQL解析在需要JSON值的上下文中使用的任何字符串,如果它作为JSON无效则会产生错误。

3 常用JSON函数

MySQL中提供了不少JSON相关的函数,下面一一来介绍常用的JSON函数。

3.1 JSON_TYPE 函数

作用:显示当前JSON字符串的类型。

mysql> select json_type('"hello"');
+----------------------+
| json_type('"hello"') |
+----------------------+
| STRING               |
+----------------------+
1 row in set (0.00 sec)

集合类型:

mysql> select json_type('["javascript", "Java", "css"]');
+---------------------------------------------+
| json_type('["javascript", "Java", "css"]') |
+---------------------------------------------+
| ARRAY                                       |
+---------------------------------------------+
1 row in set (0.00 sec)
3.2 JSON_ARRAY 函数

作用:将数组对象转换为json数组
例如:

mysql> select json_array(1, now(), "jay");
+-----------------------------------------------+
| json_array(1, now(), "jay")                |
+-----------------------------------------------+
| [1, "2020-02-28 20:18:04.000000", "jay"]|
+-----------------------------------------------+
1 row in set (0.00 sec)

其中json_array参数待转换为json的对象集合。

3.3 JSON_OBJECT 函数

语法:JSON_OBJECT(key,value,key1,value1)
作用:将对象转换为json格式数据
例如:

mysql> select json_object('name', 'jay', 'account', 'zhou');
+---------------------------------------------------+
| json_object('name', 'jay','account', 'zhou')   |
+---------------------------------------------------+
| {"name": "jay", "account": "zhou"}           |
+---------------------------------------------------+
1 row in set (0.00 sec)

3.4 JSON_QUOTE 函数

作用:引用字符串作为json值。
例如:

mysql> select json_quote('"jay"');
+--------------------------+
| json_quote('"jay"') |
+--------------------------+
| "\"jay\""           |
+--------------------------+
1 row in set (0.00 sec)

这里需要注意的是:

  • 如果参数为null值,显示也为Null值。
  • JSON_UNQUOTE 函数与JSON_QUOTE 函数作用正好相反。
3.5 JSON_MERGE_PRESERVE函数

作用:获取两个或多个JSON文档并返回组合结果
例如:

mysql>  SELECT JSON_MERGE_PRESERVE('[1, "abc"]', '{"name": "lily"}');
+--------------------------------------------------------------------+
| JSON_MERGE_PRESERVE('[1, "abc"]', '{"name": "lily"}') |
+--------------------------------------------------------------------+
| [1, "abc", {"name": "lily"}]             |
+--------------------------------------------------------------------+
1 row in set (0.00 sec)
3.6 JSON_VALID 函数

作用:判断JSON格式是否有效
例如:

mysql> select json_valid("jay"), json_valid('"jay"'), json_valid(null);
+------------------------+--------------------------+------------------+
| json_valid("jay") | json_valid('"jay"') | json_valid(null) |
+------------------------+--------------------------+------------------+
|                      0 |                        1 |             NULL |
+------------------------+--------------------------+------------------+
1 row in set (0.00 sec)

这里需要注意的是: 0 表示无效,1 表示有效,NUll 表示参数为null。

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 概要 64学时 3.5学分 章节安排 电子商务网站概况 HTML5+CSS3 JavaScript Node 电子...
    阿啊阿吖丁阅读 13,115评论 0 3
  • 第5章 引用类型(返回首页) 本章内容 使用对象 创建并操作数组 理解基本的JavaScript类型 使用基本类型...
    大学一百阅读 8,459评论 0 4
  •   引用类型的值(对象)是引用类型的一个实例。   在 ECMAscript 中,引用类型是一种数据结构,用于将数...
    霜天晓阅读 4,780评论 0 1
  • 我们先来看一个JS中常见的JS对象序列化成JSON字符串的问题,请问,以下JS对象通过JSON.stringify...
    程序员之路阅读 4,545评论 0 6
  • 什么是数据库? 数据库是存储数据的集合的单独的应用程序。每个数据库具有一个或多个不同的API,用于创建,访问,管理...
    chen_000阅读 9,463评论 0 19