我需要接收一个 json 字符串作为过程的参数,并将其解析为 json 对象。
此 json 字符串的示例:{'new_settings': [{'setting_name': 'test', 'setting_value': 'test_value'}]}
我需要获取名为“new_settings”的数组属性并迭代该数组内的对象。
这就是我现在所拥有的:
CREATE PROCEDURE `sp_test` (IN `_settings` longtext)
BEGIN
DECLARE i INT UNSIGNED DEFAULT 0;
DECLARE count INT UNSIGNED DEFAULT 0;
DECLARE current_item LONGTEXT;
START TRANSACTION;
SET count = (JSON_LENGTH(JSON_EXTRACT(_settings, '$.new_settings')) - 1);
WHILE i < count DO
SET current_item := (_settings, CONCAT('$[', i, ']'));
INSERT INTO settings(setting_name, setting_value) VALUES (JSON_EXTRACT(current_item, '$.setting_name'), JSON_EXTRACT(current_item, '$.setting_value'));
SET i := i + 1;
END WHILE;
COMMIT;
END
但我收到以下错误:“参数 1 中的 JSON 文本在位置 3 处的函数‘json_extract’中存在语法错误”,我不明白出了什么问题。
您能提供一些见解吗?
提前谢谢您。
最佳答案
你的json全错了。
您始终应该检查 json 验证器,看看 mysql 是否可以读取您的输入。
SET @a = '{"new_settings": [{"setting_name": "test", "setting_value": "test_value"}]}';
SELECT JSON_EXTRACT(@a, '$.new_settings[0].setting_name') c1
, JSON_EXTRACT(@a, '$.new_settings[0].setting_value') c2;
会给你
c1 c2
test test_value
你从哪里得到你的 json 字符串?
关于mysql - 如何将json字符串作为存储过程参数进行处理,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59323343/