代码编织梦想

目录

 前言

一、JSON语法规则

二、JSON函数

1.JSON_CONTAINS(json_doc,value)函数

2.JSON_SEARCH(json_doc ->> '$[*].key',type,value)函数

 3.JSON_PRETTY(json_doc)函数

 4.JSON_DEPTH(json_doc)函数

 5.JSON_LENGTH(json_doc[,path])函数

 6.JSON_KEYS(json_doc[,path])函数

7. JSON_INSERT(json_doc,path,val[,path,val] ...)函数

 8.JSON_REMOVE(json_doc,path[,path] ...)函数

 9.JSON_REPLACE(json_doc,path,val[,path,val] ...)函数

10.JSON_SET(json_doc,path,val[,path,val] ...)函数

 11.JSON_TYPE(json_val)函数

12. JSON_VALID(value)函数

点关注,防走丢,如有纰漏之处,请留言指教,非常感谢


 前言

很多日常业务场景都会用到json文件作为数据存储起来,而mysql5.7以上就提供了存储json的支撑。往常存储json一般都保留在pg库或者是hive库里面,现在mysql有了支持的话基本业务都可以用mysql来实现。现在mysql8.x版本对json字符出处理已经做的非常完善了。现在就让我们来详细了解一下关于json数据数据类型mysql都有哪些函数能够对其进行操作。

该系列文章将按照这个脉络行文,此系列文章将被纳入我的专栏一文速学SQL各类数据库操作,基本覆盖到使用SQL处理日常业务以及常规的查询建库分析以及复杂操作方方面面的问题。从基础的建库建表逐步入门到处理各类数据库复杂操作,以及专业的SQL常用函数讲解都花费了大量时间和心思创作,如果大家有需要从事数据分析或者数据开发的朋友推荐订阅专栏,将在第一时间学习到最实用常用的知识。此篇博客篇幅较长,值得细读实践一番,我会将精华部分挑出细讲实践。博主会长期维护博文,有错误或者疑惑可以在评论区指出,感谢大家的支持。


一、JSON语法规则

首先我们还是先复习一遍json数据类型的语法规则,这在我的很多文章都有写到:

JSON是一个标记符的序列。这套标记符包含六个构造字符字符串数字和三个字面名

JSON是一个序列化的对象数组

  • 数据为  键 / 值 (name/value)对;
  • 数据由逗号(,)分隔;
  • 大括号保存对象(object);
  • 方括号保存数组(Array);

可以是对象数组数字字符串或者三个字面值(false、null、true)中的一个。值中的字面值中的英文必须使用小写。

如:

"code":"100"

对象由花括号括起来的逗号分割的成员构成,成员是字符串键和上文所述的由逗号分割的键值对组成:

{“code”:20,"type":"mysql"}

数组是由方括号括起来的一组值构成:

"datesource":[
    {"code":"20", "type":"mysql"},
   {"code":"20", "type":"mysql"},
    {"code":"20", "type":"mysql"}
]

复习完毕之后我们再来对mysql处理json函数实验。

二、JSON函数

首先我们创建一个表来进行操作:

create TABLE json_test(
	id int not null primary key auto_increment,
	content json
	);

 接下来,向test_json数据表中插入数据。

insert into json_test(content) values('{"name":"fanstuck","age":23,"address":{"province":"zhejiang","city":"hangzhou"}}')

 可以使用“->”和“->>”查询JSON数据中指定的内容。

SELECT content->'$.name' FROM json_test where id =1;

SELECT content->>'$.address.city' FROM json_test where id =1;

1.JSON_CONTAINS(json_doc,value)函数

JSON_CONTAINS(json_doc,value)函数查询JSON类型的字段中是否包含value数据。如果包含则返回1,否则返回0。其中,json_doc为JSON类型的数据,value为要查找的数据。

SELECT JSON_CONTAINS(content, '{"name":"fanstuck"}') FROM json_test ;    

注意:value必须是一个JSON字符串。

2.JSON_SEARCH(json_doc ->> '$[*].key',type,value)函数

JSON_SEARCH(json_doc ->> '$[*].key',type,value)函数在JSON类型的字段指定的key中,查找字符串value。如果找到value值,则返回索引数据。

注意:函数的第二个参数type,取值可以是one或者all。当取值为one时,如果找到value值,则返回value值的第一个索引数据;当取值为all时,如果找到value值,则返回value值的所有索引数据。

SELECT JSON_SEARCH(content ->> '$.address', 'one', 'zhejiang') FROM json_test ;

 

SELECT JSON_SEARCH(content ->> '$.address', 'all', 'nanchang') FROM json_test ;

 3.JSON_PRETTY(json_doc)函数

JSON_PRETTY(json_doc)函数以标准的格式显示JSON数据。

 SELECT JSON_PRETTY(content) FROM json_test ;

 4.JSON_DEPTH(json_doc)函数

JSON_DEPTH(json_doc)函数返回JSON数据的最大深度。

 SELECT JSON_DEPTH(content) FROM json_test;

 

 5.JSON_LENGTH(json_doc[,path])函数

JSON_LENGTH(json_doc[,path])函数返回JSON数据的长度。

SELECT JSON_LENGTH(content) FROM json_test;

 

 6.JSON_KEYS(json_doc[,path])函数

JSON_KEYS(json_doc[,path])函数返回JSON数据中顶层key组成的JSON数组。

 SELECT JSON_KEYS(content) FROM json_test;

 

7. JSON_INSERT(json_doc,path,val[,path,val] ...)函数

JSON_INSERT(json_doc,path,val[,path,val] ...)函数用于向JSON数据中插入数据。

{"age": 23, "name": "fanstuck", "address": {"ip": "192.168.12.12", "city": "hangzhou", "province": "zhejiang"}}

可以看到,JSON_INSERT()函数并没有更新数据表中的数据,只是修改了显示结果。

 8.JSON_REMOVE(json_doc,path[,path] ...)函数

JSON_REMOVE(json_doc,path[,path] ...)函数用于移除JSON数据中指定key的数据。

 SELECT JSON_REMOVE(content, '$.address.city') FROM json_test WHERE id = 2;

 

 9.JSON_REPLACE(json_doc,path,val[,path,val] ...)函数

JSON_REPLACE(json_doc,path,val[,path,val] ...)函数用于更新JSON数据中指定Key的数据。

SELECT JSON_REPLACE(content,'$.age',20) FROM json_test ;

 

 可以看到,JSON_REPLACE()函数并没有更新数据表中的数据,只是修改了显示结果。

10.JSON_SET(json_doc,path,val[,path,val] ...)函数

JSON_SET(json_doc,path,val[,path,val] ...)函数用于向JSON数据中插入数据。

 SELECT JSON_SET(content, '$.address.street', 'xxx街道') FROM json_test WHERE id = 1;

 11.JSON_TYPE(json_val)函数

JSON_TYPE(json_val)函数用于返回JSON数据的JSON类型,MySQL中支持的JSON类型除了可以是MySQL中的数据类型外,还可以是OBJECT和ARRAY类型,其中OBJECT表示JSON对象,ARRAY表示JSON数组。

 SELECT JSON_TYPE(content) FROM json_test ;

12. JSON_VALID(value)函数

JSON_VALID(value)函数用于判断value的值是否是有效的JSON数据,如果是,则返回1,否则返回0,如果value的值为NULL,则返回NULL。

 SELECT JSON_VALID('{"name":"binghe"}'), JSON_VALID('name'), JSON_VALID(NULL);

点关注,防走丢,如有纰漏之处,请留言指教,非常感谢

以上就是本期全部内容。我是fanstuck ,有问题大家随时留言讨论 ,我们下期见

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/master_hunter/article/details/127157126

一文教你用r语言读取excel、pdf和json文件_銨靜菂等芐紶的博客-爱代码爱编程

导读:本文将讨论Excel、PDF等文件的读取,以及相应函数的参数设置。 如需转载请联系大数据   下图总结了主要程序包,希望读者在日常练习和工作中遇到不同格式的文件时,能够瞬间反应出读取该格式所需的包及对应的函数。(限于篇幅,本文未包含图中“平面文档格式”这部分的内容,如果你有兴趣,可以继续关注大数据后续文章。) ▲不同格式的数据文件读取所用的R

一文了解华为gauss数据库:开发历程、oltp&olap特点、行式&列式存储,及与oracle和aws对比..._数据和云的博客-爱代码爱编程

数据库的重要性&华为推出新一代Gauss数据库 数据库是计算机行业的基础核心软件,所有应用软件的运行和数据处理都要与其进行数据交互。数据库的开发难度,不仅体现在与其他基础器件的适配,更在于如何实现对数据高效、稳定、持续的管理。Oracle、微软的数据库之所以能长久不衰,一方面在于其强大的技术开发和产品升级迭代能力,另一方面在于

一文详解 PHP 8 的新特性-爱代码爱编程

PHP 8 将于 2020 年 11 月 26 日发布。这是一个新的主要版本,这意味着它将引入一些突破性的更改,以及许多新功能和性能改进。现在 PHP 8 在功能冻结中,这意味着不能再添加任何新功能了。 由于重大更改,您需要在代码中进行一些更改才能在 PHP 8 上运行。但是,如果您已经跟上最新版本,升级应该不会太难,因为大多数重大更改以前在 7.* 版

一文看懂用R语言读取Excel、PDF和JSON文件(附代码)-爱代码爱编程

导读:本文将讨论Excel、PDF等文件的读取,以及相应函数的参数设置。 作者:刘健 邬书豪 来源:大数据(ID:hzdashuju) 下图总结了主要程序包,希望读者在日常练习和工作中遇到不同格式的文件时,能够瞬间反应出读取该格式所需的包及对应的函数。(限于篇幅,本文未包含图中“平面文档格式”这部分的内容,如果你有兴趣,可以继续关注后续文章。)

一文了解Gauss数据库:开发历程、OLTP&OLAP特点、行式&列式存储,及与Oracle和AWS对比-爱代码爱编程

摘要:华为在IT的底层架构,逐步搭建起自己的基础架构,建立华为生态。我们这次详解华为数据库,并对目前主流的数据库进行对比。只有对比,才能发现不同。 数据库的重要性&华为推出新一代Gauss数据库 数据库是计算机行业的基础核心软件,所有应用软件的运行和数据处理都要与其进行数据交互。数据库的开发难度,不仅体现在与其他基础器件的适配,更在

一文解决scrapy带案例爬取当当图书-爱代码爱编程

Scrapy框架 简介 Scrapy的五大组件 Spiders(爬虫): 它负责处理所有Responses,从中分析提取数据,获取Item字段需要的数据,并将需要跟进的URL提交给引擎,再次进入Scheduler(调度器) Engine(引擎): 负责Spider、ItemPipeline、Downloader、Scheduler中间的通讯,信

javajson字符串转json数组,一文全懂-爱代码爱编程

Java就是个多线程的世界 1. 类的线程安全 我们经常说类是线程安全的,类是线程不安全的。那么什么样的类才是线程安全的? 1.1 定义 多线程环境下,不管不同的线程如何使用和调度这个类,这个类总是表现出正确的行为。那么这个类就是线程安全的。 类的线程安全有两个关键点: 1.操作的原子性 2.内存的可见性。 如果在多个线程中共享状态,当同步机制不

01@数据库基础详解-爱代码爱编程

文章目录 数据库一、数据库概述1、数据库简介2、数据库基本定义二、数据库的构成三、数据库的特点四、数据库分类1、关系型数据库2、键值存储数据库3、列存储数据库4、面向文档数据库5、图形数据库6、搜索引擎存储五、不同数据库常用软件1、关系型数据库2、键值存储数据库3、列存储数据库4、面向文档数据库5、图形数据库6、搜索引擎存储六、数据库类型的区别1、

0基础学数据分析 数据库简介-爱代码爱编程

## 一 数据库管理软件的由来 基于我们之前所学,数据要想永久保存,都是保存于文件中,毫无疑问,一个文件仅仅只能存在于某一台机器上。 如果我们暂且忽略直接基于文件来存取数据的效率问题,并且假设程序所有的组件都运行在一台机器上,那么用文件存取数据,并没有问题。 很不幸,这些假设都是你自己意淫出来的,上述假设存在以下几个问题。。。。。。 **1、程序所

一文精通mysql的索引优化-爱代码爱编程

索引设计原则 代码先行,索引后上联合索引尽量覆盖条件不要在小基数字段上建立索引长字符串我们可以采用前缀索引where与order by冲突时优先where基于慢sql查询做优化Mysql如何选择合适的索引 Explain工具用法 官方文档 https://dev.mysql.com/doc/refman/5.7/en/explain-output.

一文说透 MySQL JSON 数据类型-爱代码爱编程

JSON 数据类型是 MySQL 5.7.8 开始支持的。在此之前,只能通过字符类型(CHAR,VARCHAR 或 TEXT )来保存 JSON 文档。 相对字符类型,原生的 JSON 类型具有以下优势: 在插入时能自动校验文档是否满足 JSON 格式的要求。优化了存储格式。无需读取整个文档就能快速访问某个元素的值。在 JSON 类型引入之前,如果我们

mysql-查询优化器和执行计划一文搞定_虹猫95的博客-爱代码爱编程

文章目录 索引分类索引简介查询优化器概述执行计划查询执行计划的方法select_type 查询的类型select_type 查询的类型Extra 优化器优化提示信息最后 众所周知,在mysql数据库中,调优的重中之重的就是索引,而我们在使用查询优化器和执行计划时,其实也是为了检查SQL执行时是否击中了索引,从而根据执行情况来进行SQL优化。

pycharm连接远程数据库_pycharm连接clickhouse-爱代码爱编程

创建连接 首先我们需要点击Database,创建所需的数据库连接(这里使用PostgreSQL做演示)。 配置SSH信息 随后在弹出的窗口中选择SSH/SSL一栏,勾选User SSH tunnel 点击小省略号