1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
|
#json解析函数
DELIMITER $$
DROP FUNCTION IF EXISTS `json_extract_c`$$
CREATE FUNCTION `json_extract_c`(
details TEXT,
required_field VARCHAR (255)
) RETURNS TEXT CHARSET latin1
BEGIN
SET details = SUBSTRING_INDEX(details, "{" , -1);
SET details = SUBSTRING_INDEX(details, "}" , 1);
RETURN TRIM(
BOTH '"' FROM SUBSTRING_INDEX(
SUBSTRING_INDEX(
SUBSTRING_INDEX(
details,
CONCAT(
'"' ,
SUBSTRING_INDEX(required_field, '$.' , -1),
'":'
),
-1
),
',"' ,
1
),
':' ,
-1
)
) ;
END $$
DELIMITER ;
example:
select json_extract_c(json, "$.totalDays" ), json from item limit 100;
|
自测
1
2
3
4
5
6
|
CREATE TABLE `json_test` (
`id` int (11) DEFAULT NULL ,
`person_desc` text COLLATE utf8mb4_unicode_ci
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE =utf8mb4_unicode_ci;
insert INTO json_test values (2, '{"firstName":"Sergei","lastName":"Rachmaninoff","instrument":"piano"}' );
SELECT id,json_extract_c(person_desc, '$.lastName' ) as "keys" FROM json_test;
|
改进,再找不到key,返回''值,之前的是在找不到的情况下,查找到第一的值。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
|
CREATE DEFINER=`zhangfen`@`%` FUNCTION `json_extract_c`(
details TEXT,
required_field VARCHAR (255)
) RETURNS text CHARSET latin1
BEGIN
SET details = SUBSTRING_INDEX(details, "{" , -1);
SET details = SUBSTRING_INDEX(details, "}" , 1);
RETURN TRIM(
BOTH '"' FROM SUBSTRING_INDEX(
SUBSTRING_INDEX(
SUBSTRING_INDEX(
CONCAT( '"":"",' ,details),
CONCAT(
'"' ,
SUBSTRING_INDEX(required_field, '$.' , -1),
'":'
),
-1
),
',"' ,
1
),
':' ,
-1
)
) ;
END
|
总结
以上所述是小编给大家介绍的mysql(5.6及以下)解析json的方法实例详解,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对服务器之家网站的支持!
如果你觉得本文对你有帮助,欢迎转载,烦请注明出处,谢谢!
原文链接:https://www.cnblogs.com/Richard2014/archive/2019/07/18/11205027.html