mysql(5.6及以下)解析json的方法实例详解
mysql(5.6及以下)解析json
#json解析函数
DELIMITER$$
DROPFUNCTIONIFEXISTS`json_extract_c`$$
CREATEFUNCTION`json_extract_c`(
detailsTEXT,
required_fieldVARCHAR(255)
)RETURNSTEXTCHARSETlatin1
BEGIN
SETdetails=SUBSTRING_INDEX(details,"{",-1);
SETdetails=SUBSTRING_INDEX(details,"}",1);
RETURNTRIM(
BOTH'"'FROMSUBSTRING_INDEX(
SUBSTRING_INDEX(
SUBSTRING_INDEX(
details,
CONCAT(
'"',
SUBSTRING_INDEX(required_field,'$.',-1),
'":'
),
-1
),
',"',
1
),
':',
-1
)
);
END$$
DELIMITER;
example:
selectjson_extract_c(json,"$.totalDays"),jsonfromitemlimit100;
自测
CREATETABLE`json_test`(
`id`int(11)DEFAULTNULL,
`person_desc`textCOLLATEutf8mb4_unicode_ci
)ENGINE=InnoDBDEFAULTCHARSET=utf8mb4COLLATE=utf8mb4_unicode_ci;
insertINTOjson_testvalues(2,'{"firstName":"Sergei","lastName":"Rachmaninoff","instrument":"piano"}');
SELECTid,json_extract_c(person_desc,'$.lastName')as"keys"FROMjson_test;
改进,再找不到key,返回''值,之前的是在找不到的情况下,查找到第一的值。
CREATEDEFINER=`zhangfen`@`%`FUNCTION`json_extract_c`(
detailsTEXT,
required_fieldVARCHAR(255)
)RETURNStextCHARSETlatin1
BEGIN
SETdetails=SUBSTRING_INDEX(details,"{",-1);
SETdetails=SUBSTRING_INDEX(details,"}",1);
RETURNTRIM(
BOTH'"'FROMSUBSTRING_INDEX(
SUBSTRING_INDEX(
SUBSTRING_INDEX(
CONCAT('"":"",',details),
CONCAT(
'"',
SUBSTRING_INDEX(required_field,'$.',-1),
'":'
),
-1
),
',"',
1
),
':',
-1
)
);
END
总结
以上所述是小编给大家介绍的mysql(5.6及以下)解析json的方法实例详解,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对毛票票网站的支持!
如果你觉得本文对你有帮助,欢迎转载,烦请注明出处,谢谢!