mysql - 在 MYSQL 中读取 JSON 数组

标签 mysql json

我无法在 JSON 中提取确定的数据。

我有这个 JSON:

[{"id":1, "type":2}, {"id":2, "type":1}]

我想恢复存储过程中变量中的所有 ID。
CREATE DEFINER=`root`@`%` PROCEDURE `new_procedure`(a JSON)
BEGIN
   SELECT JSON_TYPE(a);
   -- return ARRAY

   SELECT a,JSON_EXTRACT(a,'$.id');
END
a返回 JSON,但 JSON_EXTRACT是空的

即使我证明将 JSON 保存在临时表中
CREATE DEFINER=`root`@`%` PROCEDURE `new_procedure`(a JSON)
BEGIN

   SELECT JSON_TYPE(a);
   DROP TEMPORARY TABLE IF EXISTS jsonTemporary;

   CREATE TEMPORARY TABLE jsonTemporary SELECT a;

   SELECT *,a->'$.id',a->>'$.id',JSON_EXTRACT(a,'$.id') FROM jsonTemporary;
END

但结果是相同的,只是第一列返回了一些东西。

最佳答案

mysql> SET @`json` :=
    -> '[
    '>    {
    '>      "id": 1, "type": 2
    '>    },
    '>    {
    '>      "id": 2, "type": 1
    '>    }
    '> ]';
Query OK, 0 rows affected (0.00 sec)

您可以获得所有 ids在一个数组中:

mysql> SELECT JSON_EXTRACT(@`json` ,'$[*].id');
+----------------------------------+
| JSON_EXTRACT(@`json` ,'$[*].id') |
+----------------------------------+
| [1, 2]                           |
+----------------------------------+
1 row in set (0.00 sec)

可以访问每个 JSON id :

mysql> SELECT JSON_EXTRACT(@`json` ,'$[0].id');
+----------------------------------+
| JSON_EXTRACT(@`json` ,'$[0].id') |
+----------------------------------+
| 1                                |
+----------------------------------+
1 row in set (0.00 sec)

尝试:

mysql> DROP PROCEDURE IF EXISTS `new_procedure`;
Query OK, 0 rows affected (0.00 sec)

mysql> DELIMITER //

mysql> CREATE PROCEDURE `new_procedure`(`json` JSON)
    -> BEGIN
    ->   DECLARE `json_items` BIGINT UNSIGNED DEFAULT JSON_LENGTH(`json`);
    ->   DECLARE `_index` BIGINT UNSIGNED DEFAULT 0;
    -> 
    ->   DROP TEMPORARY TABLE IF EXISTS `jsonTemporary`;
    -> 
    ->   CREATE TEMPORARY TABLE IF NOT EXISTS `jsonTemporary`
    ->     (`id` BIGINT UNSIGNED NOT NULL);
    -> 
    ->   WHILE `_index` < `json_items` DO
    ->     INSERT INTO `jsonTemporary` (`id`)
    ->     VALUES (JSON_EXTRACT(`json`, CONCAT('$[', `_index`, '].id')));
    ->     SET `_index` := `_index` + 1;
    ->   END WHILE;
    -> 
    ->   SELECT `id` FROM `jsonTemporary`;
    ->   DROP TEMPORARY TABLE IF EXISTS `jsonTemporary`;
    -> END//
Query OK, 0 rows affected (0.00 sec)

mysql> DELIMITER ;

mysql> CALL `new_procedure`(@`json`);
+----+
| id |
+----+
|  1 |
|  2 |
+----+
2 rows in set (0.00 sec)
Query OK, 0 rows affected (0.00 sec)

db-fiddle .

关于mysql - 在 MYSQL 中读取 JSON 数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46218021/

相关文章:

mysql - 将 MySQL 查询的输出转换为 utf8

PHP 和 MYSQL 使用文本区域插入数据库(新行和数据库中的新行)?

php - 如何将表中所有字符串的 Æ 替换为 AE?

php - 同一用户登录具有不同数据库的不同 WordPress 域

php - 通过php将mysql查询转换为json对象

php - 查询 MySQL 数据库时得到一个空集

jquery - c# asp.net mvc 中的 json 对象返回未定义

json - Web 服务架构中 MVC 设计模式的实现是否应该由多个组件组成?

javascript - 如何在javascript中将字符串转换为json对象

javascript - 为什么这个字符串不能解析为 JSON?