我需要接收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
但是我收到以下错误:"Syntax error in JSON text in argument 1 to function 'json_extract' at position 3",我不明白这是什么错误。
您能否提供一些见解?
先感谢您。
分析解答
您的json都是错误的。
如果mysql可以读取您的输入,则应始终与json验证程序进行检查。
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字符串?