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

本文涉及的产品
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
云数据库 RDS MySQL,集群系列 2核4GB
推荐场景:
搭建个人博客
云数据库 RDS MySQL,高可用系列 2核4GB
简介: 【SQL编程】MySQL 5.7.28 版本使用 SQL 直接解析 JSON 字符串(判断是否是合法JSON类型+文本深度+文本长度+值类型+keys获取+值获取+不同深度数据获取)

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值获取

SELECT
  id,
  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 
FROM
  tb_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';

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

SELECT
  id,
  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 
FROM
  tb_test_json 
WHERE
  json_str ->> '$.name' = '杰森' OR json_str -> '$.age' = 30 OR json_str -> '$.hobby[0].type' = 'shopping';

目录
相关文章
|
13天前
|
SQL 存储 缓存
SQL Server 数据太多如何优化
11种优化方案供你参考,优化 SQL Server 数据库性能得从多个方面着手,包括硬件配置、数据库结构、查询优化、索引管理、分区分表、并行处理等。通过合理的索引、查询优化、数据分区等技术,可以在数据量增大时保持较好的性能。同时,定期进行数据库维护和清理,保证数据库高效运行。
|
29天前
|
SQL 移动开发 Oracle
SQL语句实现查询连续六天数据的方法与技巧
在数据库查询中,有时需要筛选出符合特定时间连续性条件的数据记录
|
29天前
|
SQL 运维 关系型数据库
MySQL 运维 SQL 备忘
MySQL 运维 SQL 备忘录
45 1
|
16天前
|
JSON 关系型数据库 MySQL
MySQL JSON数据存储结构与操作
通过本文的介绍,我们了解了MySQL中JSON数据类型的基本操作、常用JSON函数、以及如何通过索引和优化来提高查询性能。JSON数据类型为存储和操作结构化数据提供了灵活性和便利性,在现代数据库应用中具有广泛的应用前景。希望本文对您在MySQL中使用JSON数据类型有所帮助。
31 0
|
18天前
|
SQL 关系型数据库 MySQL
MySql5.6版本开启慢SQL功能-本次采用永久生效方式
MySql5.6版本开启慢SQL功能-本次采用永久生效方式
32 0
|
18天前
|
SQL 关系型数据库 MySQL
mysql编写sql脚本:要求表没有主键,但是想查询没有相同值的时候才进行插入
mysql编写sql脚本:要求表没有主键,但是想查询没有相同值的时候才进行插入
30 0
|
5月前
|
JSON JavaScript 测试技术
掌握JMeter:深入解析如何提取和利用JSON数据
Apache JMeter教程展示了如何提取和使用JSON数据。创建测试计划,包括HTTP请求和JSON Extractor,设置变量前缀和JSON路径表达式来提取数据。通过Debug Sampler和View Results Tree监听器验证提取结果,然后在后续请求和断言中使用这些数据。此方法适用于复杂测试场景,提升性能和自动化测试效率。
|
3月前
|
存储 JSON API
淘系API接口(解析返回的json数据)商品详情数据解析助力开发者
——在成长的路上,我们都是同行者。这篇关于商品详情API接口的文章,希望能帮助到您。期待与您继续分享更多API接口的知识,请记得关注Anzexi58哦! 淘宝API接口(如淘宝开放平台提供的API)允许开发者获取淘宝商品的各种信息,包括商品详情。然而,需要注意的是,直接访问淘宝的商品数据API通常需要商家身份或开发者权限,并且需要遵循淘宝的API使用协议。
淘系API接口(解析返回的json数据)商品详情数据解析助力开发者
|
1月前
|
JSON JavaScript API
商品详情数据接口解析返回的JSON数据(API接口整套流程)
商品详情数据接口解析返回的JSON数据是API接口使用中的一个重要环节,它涉及从发送请求到接收并处理响应的整个流程。以下是一个完整的API接口使用流程,包括如何解析返回的JSON数据:
|
3月前
|
JSON 前端开发 API
【淘系】商品详情属性解析(属性规格详情图sku等json数据示例返回参考),淘系API接口系列
在淘宝(或天猫)平台上,商品详情属性(如属性规格、详情图、SKU等)是商家在发布商品时设置的,用于描述商品的详细信息和不同规格选项。这些信息对于消费者了解商品特性、进行购买决策至关重要。然而,直接通过前端页面获取这些信息的结构化数据(如JSON格式)并非直接暴露给普通用户或开发者,因为这涉及到平台的商业机密和数据安全。 不过,淘宝平台提供了丰富的API接口(如淘宝开放平台API),允许有资质的开发者或合作伙伴通过编程方式获取商品信息。这些API接口通常需要注册开发者账号、申请应用密钥(App Key)和秘钥(App Secret),并遵守淘宝的API使用协议。