1. 版本说明

SELECT @@version;
-- 5.6.35-log 不支持 JSON 解析相关函数
-- 5.7.28 支持

2. 测试代码

准备阶段

建表

CREATE TABLE `tb_test_json` (`id` varchar(64) NOT NULL COMMENT '主键',`json_str` varchar(255) DEFAULT NULL COMMENT 'JSON字符串',PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

录入数据

INSERT INTO `test`.`tb_test_json` ( `id`, `json_str` )
VALUES( '001', '{    \"age\": 10,    \"gender\": \"male\",    \"hobby\": [        {            \"describe\": \"健身时听摇滚乐,身心愉悦\",            \"type\": \"music\"        },        {            \"describe\": \"偶尔垂钓,纯属娱乐\",            \"type\": \"fishing\"        }    ],    \"name\": \"杰森\"}' );
INSERT INTO `test`.`tb_test_json` ( `id`, `json_str` )
VALUES( '002', '{    \"age\": 20,    \"gender\": \"female\",    \"hobby\": [        {            \"describe\": \"买买买,钱包被掏空\",            \"type\": \"shopping\"        },        {            \"describe\": \"东南西北,美食在心中\",            \"type\": \"food\"        }    ],    \"name\": \"贝比\"}' );
INSERT INTO `test`.`tb_test_json` ( `id`, `json_str` )
VALUES( '003', '{    \"age\": 30,    \"gender\": \"female\",   \"name\": \"汤姆\"}' );

测试说明 JSON相关的函数,大部分我们看名字就知道函数的作用:

2.1 判读是否是合法的JSON类型

SELECT json_valid( 'hello' ), json_valid( '"hello"' );

2.2 JSON文本深度

SELECT id, json_depth( json_str ) FROM tb_test_json;

2.3 JSON文本长度

SELECT id, json_length( json_str ) FROM tb_test_json;

2.4 JSON值类型


SELECT id, json_type( json_str ) FROM tb_test_json;

2.5 JSON的keys

SELECT id, json_keys( json_str ) FROM tb_test_json;

2.6 JSON值获取

SELECTid,json_extract( json_str, '$.name' ) AS name0,json_extract( json_str, '$.age' ) AS age0,json_str ->> '$.name' AS name1,json_str ->> '$.age' AS age1,json_str -> '$.name' AS name2,json_str -> '$.age' AS age2
FROMtb_test_json;

2.7 JSON数据解析

单箭头获取值 双箭头获取字符串

-- 【可以】获取结果
SELECT * FROM tb_test_json WHERE json_str -> '$.age' = 20;
-- 【可以】获取结果
SELECT * FROM tb_test_json WHERE json_str ->> '$.age' = '20';
-- 【不可以】获取结果
SELECT * FROM tb_test_json WHERE json_str -> '$.age' = '20';

数据筛选加解析【不同深度】

SELECTid,json_extract( json_str, '$.name' ) AS name0,json_extract( json_str, '$.age' ) AS age0,json_extract( json_str, '$.hobby[0].type' ) AS hobby0,json_str ->> '$.name' AS name1,json_str ->> '$.age' AS age1,json_str ->> '$.hobby[0].type' AS hobby1,json_str -> '$.name' AS name2,json_str -> '$.age' AS age2,json_str -> '$.hobby[0].type' AS hobby2
FROMtb_test_json
WHEREjson_str ->> '$.name' = '杰森' OR json_str -> '$.age' = 30 OR json_str -> '$.hobby[0].type' = 'shopping';

【SQL编程】MySQL 5.7.28 版本使用 SQL 直接解析 JSON 字符串(判断是否是合法JSON类型+文本深度+文本长度+值类型+keys获取+值获取+不同深度数据获取)相关推荐

  1. mysql 8.0.28版本安装配置方法图文教程

    mysql 8.0.28版本安装配置方法图文教程 从 Mysql 官网下载 mysql 下载完成后直接双击进行安装,打开后的页面如下所示: 选择自定义custom,接着下一步 将MySQL Serve ...

  2. [顶]ORACLE PL/SQL编程详解之二:PL/SQL块结构和组成元素(为山九仞,岂一日之功)...

    [顶]ORACLE PL/SQL编程详解之二:PL/SQL块结构和组成元素(为山九仞,岂一日之功) 原文:[顶]ORACLE PL/SQL编程详解之二:PL/SQL块结构和组成元素(为山九仞,岂一日之 ...

  3. ORACLE PL/SQL编程详解之二:PL/SQL块结构和组成元素(为山九仞,岂一日之功)

    [顶]ORACLE PL/SQL编程详解之二: PL/SQL块结构和组成元素(为山九仞,岂一日之功) 继上四篇:ORACLE PL/SQL编程之八:把触发器说透                ORAC ...

  4. [顶]ORACLE PL/SQL编程详解之二:PL/SQL块结构和组成元素(为山九仞,岂一日之功)

    [顶]ORACLE PL/SQL编程详解之二: PL/SQL块结构和组成元素(为山九仞,岂一日之功) 继上四篇:ORACLE PL/SQL编程之八:把触发器说透                ORAC ...

  5. sql注入 mysql 猜数据库名字_web渗透-SQL注入数据库信息盗取

    sql注入原理 脚本代码接收来自前端数据未进行过滤,导致恶意sql语句插入到数据库中查询执行. 如下代码: $id = $_GET['id']; $sql = "select * from ...

  6. oracle sql 导入mysql数据库备份_使用PL/SQL连接oracle数据库,并将数据进行导出备份和导入恢复...

    使用PL/SQL连接oracle数据库,并将数据进行导出备份和导入恢复 这种操作百度一搜一大片,今天整理以前做的项目时自己备份了一下数据库,试着将数据进行导出备份和导入恢复了一下:下面是操作过程: 1 ...

  7. mysql 截取json字符串_mysql如何截取一个json字符串?

    慕用2447696 代码如下:CREATE PROCEDURE sp_str(IN p_str VARCHAR(50), /*原始字符串*/IN p_begin_str VARCHAR(50), /* ...

  8. mysql json字符串_mysql如何截取一个json字符串?

    代码如下: CREATE PROCEDURE sp_str ( IN p_str VARCHAR(50), /*原始字符串*/ IN p_begin_str VARCHAR(50), /*要匹配的起始 ...

  9. 国产麒麟系统KylinOS Server V10 SP2安装MySQL 8.0.28—RPM包安装

    最近工作重点转向信创领域后就开始研究国产化操作系统对各种数据库的适配方案,期间发现一些很有价值的内容,特意整理成文章分享出来. 此文档讲述如何在国产麒麟操作系统KylinOS Server V10 S ...

最新文章

  1. HTML产品表单列表,HTML表格、列表、表单
  2. (转)C#创建数字证书并导出为pfx,并使用pfx进行非对称加解密
  3. 利用?和 ??简化界面的默认配置/自定义配置
  4. ios微信小程序下拉刷新怎么配_为什么他的下拉刷新是个动画效果?
  5. 安装数据库windows 安装redmine 详解
  6. 数据分析告诉你为什么Apple Watch会大卖?
  7. 挖掘城市ip_企鹅号助力城市品牌IP化进程
  8. c语言中typeof关键字
  9. angularjs中的$scope和$rootScope
  10. 身份证验证TW WordPress
  11. 解决Spring Boot启动项目Tomcat不能访问80端口的问题
  12. AppLoader的使用
  13. excel如何批量制作二维码?
  14. Debain查看ip地址
  15. PS羽化N个像素后填充淡绿色
  16. 跨品种套利 (期货)
  17. 看python源代码的顺序_查看“Python-2020-fall”的源代码
  18. 靶场复现————平行越权、垂直越权
  19. 网页游戏怎么修改数据_2014一周网页游戏数据报告(10.6—10.12)
  20. 拼图游戏 Vue 版本

热门文章

  1. 无法连接虚拟设备 ide1:0
  2. java String 转boolean
  3. private 私有的 外部不能访问的
  4. c语言求泰勒正弦公式,用泰勒公式求sin(x)的近似值
  5. linux安装python3_关于在linux系统中python第三库的区分和查找
  6. 翻译职称计算机能力,2018年职称计算机word2003考点辅导:用好Office2003中的翻译功能...
  7. comsol稀物质传递_什么是质量传递?
  8. 7系列mrcc xilinx_XILINX 7系列FPGA_时钟篇
  9. airflow sql_alchemy_conn mysql_搭建AirFlow—— 一段波折后的总结
  10. 九十一、Python的GUI系列 | QT组件篇