【SQL编程】MySQL 5.7.28 版本使用 SQL 直接解析 JSON 字符串(判断是否是合法JSON类型+文本深度+文本长度+值类型+keys获取+值获取+不同深度数据获取)
生活随笔
收集整理的這篇文章主要介紹了
【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值獲取
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获取+值获取+不同深度数据获取)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 【SQL编程】Greenplum 数据库
- 下一篇: Nexus【环境搭建 01】CentOS