我可以使用别名或const作为JSON_EXTRACT函数的JSON键

时间:2019-01-30 22:39:31

标签: mysql json database

如果使用const或别名作为提取JSON数据的键的方式,我就很伤心。例如,我们在数据库中有这样的json。

{
"key1": "value1",
"key2": "value"
}    

然后我们就可以得到value1

col->>'$.key'

或这个

JSON_EXTRACT(col, '$.key')

但是如果我需要通过使用get in子查询的值来实现这一点怎么办?

@X =: "key1"
//or
SELECT data FROM table AS x

我花了大约我们的树,但我不知道如何使它像

JSON_EXTRACT(col, @X)

所有内容都只会得到“无效的JSON路径表达式”

我尝试使用CONCAT和不同的转义符号,但是仍然出现相同的错误

2 个答案:

答案 0 :(得分:1)

您需要将catch连接到您提取的值。

$.

答案 1 :(得分:1)

git status --porcelain...

带有用户定义的变量:

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)

内联视图可以连接到我们从以下位置检索json的实际表中:

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)