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

本文涉及的产品
云数据库 RDS MySQL,集群系列 2核4GB
推荐场景:
搭建个人博客
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
全局流量管理 GTM,标准版 1个月
简介: 【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';

目录
相关文章
|
9天前
|
SQL 数据库
SQL解析相关报错
SQL解析相关报错
28 5
|
1月前
|
XML JSON 前端开发
json字符串CSS格式化
完成以上步骤后,你便能在网页中看到格式化后的JSON数据,它们将按照CSS定义的样式进行展示,使数据更易于阅读和理解。通过有效地结合JSON和CSS,你可以创建出更加丰富且易于交互的网页内容。
160 64
|
3天前
|
JSON 前端开发 JavaScript
json字符串如何转为list对象?
json字符串如何转为list对象?
14 7
|
14天前
|
SQL 安全 数据库
Python Web开发者必看!SQL注入、XSS、CSRF全面解析,守护你的网站安全!
在Python Web开发中,构建安全应用至关重要。本文通过问答形式,详细解析了三种常见Web安全威胁——SQL注入、XSS和CSRF,并提供了实用的防御策略及示例代码。针对SQL注入,建议使用参数化查询;对于XSS,需对输出进行HTML编码;而防范CSRF,则应利用CSRF令牌。通过这些措施,帮助开发者有效提升应用安全性,确保网站稳定运行。
28 1
|
25天前
|
XML JSON 前端开发
json字符串CSS格式化
json字符串CSS格式化
30 4
|
8天前
|
JSON 数据格式 Python
6-1|Python如何将json转化为字符串写到文件内 还保留json格式
6-1|Python如何将json转化为字符串写到文件内 还保留json格式
|
27天前
|
存储 JSON API
Python编程:解析HTTP请求返回的JSON数据
使用Python处理HTTP请求和解析JSON数据既直接又高效。`requests`库的简洁性和强大功能使得发送请求、接收和解析响应变得异常简单。以上步骤和示例提供了一个基础的框架,可以根据你的具体需求进行调整和扩展。通过合适的异常处理,你的代码将更加健壮和可靠,为用户提供更加流畅的体验。
65 0
|
2月前
|
SQL 存储 数据库
SQL Server 中的备份类型详解
【8月更文挑战第31天】
46 0
|
2月前
|
SQL 数据处理 数据库
|
2月前
|
SQL 监控 供应链
下一篇
无影云桌面