mysql5.7json使用

本文介绍了如何使用MySQL内置函数来操作JSON数据,包括插入、查询、更新及删除等常见操作。展示了如何获取JSON深度、长度、类型,提取特定值,搜索关键字位置,并提供了示例说明。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

create table t1(jdoc json);
insert into t1 values(’
{
“hey”: “guy”,
“anumber”: 243,
“anobject”: {
“whoa”: “nuts”,
“anarray”: [
1,
2,
“three”
],
“more”: “stuff”
},
“awesome”: true,
“bogus”: false,
“meaning”: null,
“japanese”: “明日がある。”,
“link”: “http://jsonview.com“,
“notLink”: “http://jsonview.com is great”
}
‘);
mysql> select json_depth(jdoc) from t1; 返回json文本的深度
+——————+
| json_depth(jdoc) |
+——————+
| 4 |
+——————+
1 rows in set (0.02 sec)
mysql> select json_length(jdoc) from t1; 返回json文本的长度
+——————-+
| json_length(jdoc) |
+——————-+
| 9 |
+——————-+
1 rows in set (0.01 sec)
mysql> select json_type(jdoc) from t1; 返回json值得类型
+—————–+
| json_type(jdoc) |
+—————–+
| OBJECT |
+—————–+
1 rows in set (0.04 sec)
mysql> SELECT JSON_VALID(‘hello’), JSON_VALID(‘“hello”’); 判读是否是合法的json类型
+———————+———————–+
| JSON_VALID(‘hello’) | JSON_VALID(‘“hello”’) |
+———————+———————–+
| 0 | 1 |
+———————+———————–+
1 row in set (0.00 sec)
查看存储的json有哪些key
mysql> select json_keys(jdoc) from t1;
+———————————————————————————————-+
| json_keys(jdoc) |
+———————————————————————————————-+
| [“hey”, “link”, “bogus”, “anumber”, “awesome”, “meaning”, “notLink”, “anobject”, “japanese”] |
+———————————————————————————————-+
1 rows in set (0.05 sec)
查看anobject有哪些key
mysql> select json_keys(jdoc,’anobject’) from t1;
+——————————+
| json_keys(jdoc,’ .anobject)|++|[more,whoa,anarray]|++5rowsinset(0.00sec)mysql>selectjsonsearch(jdoc,one,nuts)fromt1;++|jsonsearch(jdoc,one,nuts)|++| .anobject.whoa” |
+——————————–+
1 rows in set (0.04 sec)
查看所有包含json的位置
mysql> select json_search(jdoc,’all’,’%json%’) from t1;
+———————————-+
| json_search(jdoc,’all’,’%json%’) |
+———————————-+
| [“link”, “notLink”] |
+———————————-+
1rows in set (0.00 sec)
抽取值
mysql> select json_extract(jdoc,’link[0]’) from t1;
+——————————–+
| json_extract(jdoc,’link[0]’) |
+——————————–+
| “http://jsonview.com” |
+——————————–+
1 rows in set (0.00 sec)
mysql> select json_extract(jdoc,’anobject[0].more[0]’) from t1;
+——————————————–+
| json_extract(jdoc,’anobject[0].more[0]’) |
+——————————————–+
| “stuff” |
+——————————————–+
1 rows in set (0.00 sec)
或者使用下面的方式
mysql> select jdoc,jdoc->’key2’ from t1;
+———————————————————————–
{“key1”: “value1”, “key2”: “value2”} | “value2” |
追加记录
mysql> select JSON_ARRAY_APPEND(jdoc,’name’,’xxx’) from t1;
+—————————————————————————————–

| JSON_ARRAY_APPEND(jdoc,’name’,’xxx’)
|

| {“key1”: “value1”, “key2”: “value2”}
|
| {“age”: 28, “name”: [“baixiaoyu”, “xxx”]}
|
| {“age”: 28, “name”: [“baixiaoyu”, “xxx”]}
|
| {“age”: 28, “name”: [“baixiaoyu”, “xxx”]}
删除json数据
mysql> select JSON_REMOVE(jdoc,’name’) from t1;
+———————————————————————————————————————————————————————–
——————————————————————————————————+
| JSON_REMOVE(jdoc,’name’)
|
+———————————————————————————————————————————————————————–
——————————————————————————————————+
| {“key1”: “value1”, “key2”: “value2”}
|
| {“age”: 28}
|
| {“age”: 28}
|
| {“age”: 28}
|
有就替换,没有就insert
mysql> select JSON_set(jdoc,’name’,’ooo’) from t1;
+———————————————————————————————————————————————————————–
| JSON_set(jdoc,’$.name’,’ooo’)
|
+——————————————————————————————————————–
| {“key1”: “value1”, “key2”: “value2”, “name”: “ooo”}
|
| {“age”: 28, “name”: “ooo”}
|
| {“age”: 28, “name”: “ooo”}
|
| {“age”: 28, “name”: “ooo”}

查询结果去掉双引号
mysql> SELECT JSON_UNQUOTE(JSON_EXTRACT(jdoc, ‘name’)) AS name from t1;
+———–+
| name |
+———–+
| NULL |
| baixiaoyu |
| baixiaoyu |
| baixiaoyu |
| NULL |
+———–+

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值