【问题标题】:JSON_EXTRACT always returning null in stored procedureJSON_EXTRACT 在存储过程中总是返回 null
【发布时间】:2021-11-01 11:36:22
【问题描述】:

您好,我是 mysql 中的 SP 和 JSON 函数的新手

DELIMITER $$
CREATE DEFINER=`root`@`localhost` PROCEDURE `adocs_sp_web_questionnaire_has_child`(IN 
`var_has_child_text` TEXT, IN `var_parent_id` INT, OUT `var_child_text` TEXT)
BEGIN 

DECLARE counter INT DEFAULT 0;
DECLARE count_max INT DEFAULT 0;
DECLARE individual_question,question_child,question_name,questions_list, json VARCHAR(255); 
DECLARE i,var_parent_id_output INT DEFAULT 0; 

SELECT var_has_child_text INTO json; 

SELECT JSON_EXTRACT(json,"$.child_list")  AS questions_list;
END

var_has_child_text 是一个输入参数,具有以下 JSON 值,var_parent_id 为 5

{"child_list":[{"name": "Sub Question 1", "has_child": [{"name": "Sub Question 1 1", 
"has_child": [{"name": "Sub Question 1 1 1"}, {"name": "Sub Question 1 1 2"}, {"name": "Sub 
Question 1 1 3"}]}, {"name": "Sub Question 1 2"}, {"name": "Sub Question 1 3"}]}, {"name": 
"Sub Question 2"}, {"name": "Sub Question 3"}]}

我正在尝试使用

提取上述 var_has_child_text (JSON)
SELECT JSON_EXTRACT(json,"$.child_list") AS questions_list;

但它总是返回 null ;

但我需要根据键“child_list”将这个 JSON 对象数组拆分为单独的迭代,并根据我需要执行其他内容的值。

TIA。

详细的视频要求:

https://www.loom.com/share/c6042f43967044689e50169fb75d67cb

【问题讨论】:

    标签: mysql stored-procedures mariadb


    【解决方案1】:

    您的 JSON 无效。从中删除所有换行符。

    SELECT REPLACE(REPLACE(var_has_child_text, '\r', ' '), '\n', ' ') INTO json; 
    

    https://dbfiddle.uk/?rdbms=mysql_8.0&fiddle=ebe1eae6e351cb76da27618f48470a21

    PS。 JSON 允许内部换行符,但仅限于值之外。 IE。第 2 行和第 3 行之间的换行符不合法,而第 1 行和第 2 行之间以及第 3 行和第 4 行之间的换行符是合法的。

    PPS。当然,这种方法可能会在值中添加多余的空格。但是这种方法是一种缓解方法 - 您必须修复创建源 JSON 的代码并避免值中的换行符。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2014-08-04
      • 1970-01-01
      • 1970-01-01
      • 2013-01-31
      • 2013-01-17
      • 1970-01-01
      • 2020-08-03
      相关资源
      最近更新 更多