mysql> select json_extract('{"key1": "value1","key2": "value"} ','$.key2') AS foo ;
^^^^^^^^
+---------+
| foo |
+---------+
| "value" |
+---------+
1 row in set (0.00 sec)
С пользовательской переменной:
mysql> set @X := 'key2' ;
Query OK, 0 rows affected (0.00 sec)
mysql> select json_extract('{"key1": "value1","key2": "value"} ',CONCAT('$.',@X)) AS foo ;
^^^^^^^^^^^^^^^
+---------+
| foo |
+---------+
| "value" |
+---------+
1 row in set (0.00 sec)
или
mysql> set @X := '$.key2' ;
Query OK, 0 rows affected (0.00 sec)
mysql> select json_extract('{"key1": "value1","key2": "value"} ',@X) AS foo ;
^^
+---------+
| foo |
+---------+
| "value" |
+---------+
1 row in set (0.00 sec)
извлечение значения ключа из запроса в виде встроенного представления:
mysql> select json_extract('{"key1": "value1","key2": "value"} ',CONCAT('$.',t.bar)) AS foo
-> from ( select 'key2' AS bar ) t ;
+---------+
| foo |
+---------+
| "value" |
+---------+
1 row in set (0.00 sec)
Встроенное представление может быть присоединено к фактической таблице, из которой мы получаем json:
SELECT JSON_EXTRACT(s.jsoncol, CONCAT('$.',k.bar)) AS foo
FROM mytable s
CROSS
JOIN ( SELECT 'key2' AS bar ) k