没有内置的MySQL功能使用JSON工作,但这里是一个非常简单的存储功能,以从提取JSON值:
DELIMITER $$
CREATE FUNCTION JSON_EXTRACT(json TEXT, name CHAR(64))
RETURNS CHAR(64) DETERMINISTIC
BEGIN
SET @namePos = LOCATE(name, json);
IF @namePos = 0 THEN RETURN ''; END IF;
SET @valuePos = LOCATE(':', json, @namePos) + 1;
IF SUBSTR(json, @valuePos, 1) = '"' THEN
SET @valuePos = @valuePos + 1;
RETURN SUBSTR(json, @valuePos, LOCATE('"', json, @valuePos) - @valuePos);
ELSE
SET @valueBegin = TRIM(SUBSTR(json, @valuePos));
SET @delim1 = LOCATE(' ', @valueBegin); SET @delim1 = IF(@delim1 = 0, 64, @delim1);
SET @delim2 = LOCATE(',', @valueBegin); SET @delim2 = IF(@delim2 = 0, 64, @delim2);
SET @delim3 = LOCATE('}', @valueBegin); SET @delim3 = IF(@delim3 = 0, 64, @delim3);
RETURN LEFT(@valueBegin, LEAST(@delim1, @delim2, @delim3) - 1);
END IF;
END$$
用例:
SELECT JSON_EXTRACT('{"a":"aa","b" : 1, "c": 3}', 'b') AS test;
请注意,该功能有很多限制。例如,它不处理嵌套类,键名不应包含在值中。