我已经开始在mysql 5.7中使用JSON数据类型。有没有一种方法可以提取一个没有引号的值?例如,当设置虚拟索引时。
范例:
mysql> INSERT INTO test (data) VALUES ('{"type": "user" ,
"content" : { "username": "jdoe", "firstname" : "John", "lastname" : "Doe" } }');
mysql> SELECT json_extract(data,'$.type') FROM test;
+-----------------------------+
| json_extract(data,'$.type') |
+-----------------------------+
| "user" |
+-----------------------------+
字符串
如何到达
+-----------------------------+
| json_extract(data,'$.type') |
+-----------------------------+
| user |
+-----------------------------+
型
?
9条答案
按热度按时间qvtsj1bj1#
您可以使用
->>
运算符提取未加引号的数据,非常简单!字符串
另外两种方式:
JSON_UNQUOTE(JSON_EXTRACT(column, path))
个JSON_UNQUOTE(column->path)
个注意:三种不同的方式产生相同的命令,如
EXPLAIN
所解释的:与->一样,->>运算符始终在EXPLAIN的输出中展开,如以下示例所示:
型
阅读更多MySQL参考手册https://dev.mysql.com/doc/refman/5.7/en/json-search-functions.html#operator_json-inline-path
注意:
->>
运算符是在MySQL5.7.13中增加的3zwjbxry2#
可以使用JSON_UNQUOTE()方法:
字符串
此方法将处理内部引号,例如:
型
将给予:
型
我相信,在几乎所有的情况下,非引号都是更好的。
mmvthczy3#
另一种方法是;
字符串
eit6fx6z4#
MySQL 8.0.21支持
JSON_VALUE
函数从指定文档中给定的路径处的JSON文档中提取值,并返回提取的值,并选择将其转换为所需类型。完整的语法如下所示:
字符串
如果RETURNING子句未指定,则JSON_VALUE()函数的返回类型为VARCHAR(512)
**db<>fiddle demo**第一个字符
型
vhmi4jdf5#
可以使用CAST()函数将json对象转换为varchar
字符串
t2a7ltrp6#
当我在数据库中存储了一个字符串时,我偶然发现了这一点,这是一个JSON对象-这就是你如何将整个原始对象提取到另一个对象中:
字符串
这个返回
型
8fq7wneg7#
字符串
kx1ctssn8#
也可以修改列本身,使引号不在生成的列中
字符串
hmmo2u0o9#
我找到了一个最干净的方法。CAST函数不起作用,并且@Pryanshu的答案可以通过使用独立于值长度
字符串