我需要接收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字符串?