mysql - 如何将json字符串作为存储过程参数进行处理

标签 mysql mariadb

我需要接收一个 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/

相关文章:

mysql - 如何在选择时将 NULL 包含到 ENUM 中?

mysql - Galera_new_cluster 命令未启动集群

c++ - 如何将 Unicode 字符串连接成字符串以传递给 mysql 调用

php - 允许的内存大小 134217728 字节耗尽(尝试分配 4294967296 字节)查看答案?还是行不通

java - mysql中的日期比较

mysql - 如何编写基于同一列上两个不同条件的查询返回结果的分组?

mysql - PrestaShop 无缘无故在/tmp 中创建#sql_ 文件

php - Ubuntu 12.10 上的 PHP MySQL 问题

php - Laravel 全局设置模型

mysql - 如何在 MySQL 中查找共享相同(未知)前缀的字符串组?