在JSON_EXTRACT中返回null值

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了在JSON_EXTRACT中返回null值相关的知识,希望对你有一定的参考价值。

MyJsonArray

[{"ID":"D29","PersonID":"23616639"},{"ID":"D30","PersonID":"22629626"}]

我希望从sql函数将此数组设置为我的表但在变量中返回null值而不在我的数据库中设置记录我的函数:

    DELIMITER $$
CREATE DEFINER=`toshiari`@`localhost` FUNCTION `setTitleRecords`(`Title` VARCHAR(166) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci, `List` JSON) RETURNS int(4)
BEGIN
    DECLARE Item                INT;
    DECLARE HolderLENGTH        INT;
    DECLARE ValidJson           INT;
    DECLARE ID                  VARCHAR(166);
    DECLARE PersonID            VARCHAR(166);
    DECLARE S1                  VARCHAR(166);
    DECLARE S2                  VARCHAR(166);
    SET ValidJson = (SELECT JSON_VALID(List));
    IF ValidJson = 1 THEN 
        SET HolderLENGTH = (SELECT JSON_LENGTH(List));
        SET Item = 0;
        WHILE Item < HolderLENGTH DO
            SET S1 = CONCAT("'$[",Item, "].ID'");
            SET S2 = CONCAT("'$[",Item, "].PersonID'");
            SET ID       = (SELECT JSON_EXTRACT(List,S1));
            SET PersonID = (SELECT JSON_EXTRACT(List,S2));
            INSERT INTO `Titles`(`ID`,`PersonID`,`Title`) VALUES (ID, PersonID, Title);
            SET Item = Item + 1;
        END WHILE;
        RETURN 3;       
    ELSE
        RETURN 2;       
    END IF;
END$$
DELIMITER ;

当我在Sql命令中使用此命令没有问题并返回true值

SELECT JSON_EXTRACT('[{"ID":"D29","PersonID":"23616639"},{"ID":"D30","PersonID":"22629626"}]','$[0].ID')  return "D29"

返回“D29”但在运行时从此代码返回错误并说:

SET @p0='DR'; SET @p1='[{"ID":"D29","PersonID":"23616639"},{"ID":"D30","PersonID":"22629626"}]'; SELECT `setTitleRecords`(@p0, @p1) AS `setTitleRecords`;


#4042 - Syntax error in JSON path in argument 2 to function 'json_extract' at position 1 
答案

我创建了一个小测试,以重现您的问题。基本上你只需要通过以下方式重新声明S1和S2:

SET S1 = CONCAT('$[',Item,'].ID');
SET S2 = CONCAT('$[',Item,'].PersonID');

就是这样。您可以在以下网址中查看测试:https://www.db-fiddle.com/f/2TPgF868snjwcHN3uwoSEA/0

以上是关于在JSON_EXTRACT中返回null值的主要内容,如果未能解决你的问题,请参考以下文章

getActivity() 在片段上返回 null?

安卓。片段 getActivity() 有时返回 null

android片段getArguments()返回null

当所述列的值为 NULL 时,我在可空列上使用 JSON_extract 函数的 where 语句得到确认?

Android getActivity() 总是在片段内返回 null

ViewPager 中的片段在 getView() 中返回 null