mysql的json数据类型使用简介

 

定义

Json Array

 json数组,示例:["abc", 10, null, true, false]

 

Json Object

json对象,示例:{"k1": "value", "k2": 10}

以上两者可嵌套,示例:

[99, {"id": "HK500", "cost": 75.99}, ["hot", "cold"]]

{"k1": "value", "k2": [10, 20]} 

 

实例 

1.建表(带json列)

CREATE TABLE t1 (jdoc JSON);
--CREATE TABLE t2 (jdoc JSON not null);

2.插入

INSERT INTO t1 VALUES('{"key1": "value1", "key2": "value2"}');

插入json列,会检查内容是否符合格式,不符合时报错,如下:

INSERT INTO t1 VALUES('[1, 2,'); 
--报错:ERROR 3140 (22032) at line 2: Invalid JSON text:
--"Invalid value." at position 6 in value (or column) '[1, 2,'. 

3.更新

UPDATE t1 SET jdoc = '{"key3": "value3", "key4": "value4"}'; --这里为更新整个字段

4.常用函数

  • JSON_VALID

有效返回1,无效返回0,传入NULL返回NULL

SELECT JSON_VALID('{"a": 1}');
+------------------------+
| JSON_VALID('{"a": 1}') |
+------------------------+
|                      1 |
+------------------------+

SELECT JSON_VALID('hello'), JSON_VALID('"hello"');
+---------------------+-----------------------+
| JSON_VALID('hello') | JSON_VALID('"hello"') |
+---------------------+-----------------------+
|                   0 |                     1 |
+---------------------+-----------------------+
  • JSON_EXTRACT 

抽取函数,从json获取对应路径的值

--json数组
SELECT JSON_EXTRACT('[10, 20, [30, 40]]', '$[1]') ; 
+--------------------------------------------+
| JSON_EXTRACT('[10, 20, [30, 40]]', '$[1]') |
+--------------------------------------------+
| 20                                         |
+--------------------------------------------+

--kv对象
SELECT JSON_EXTRACT('{"key1":"value1", "key2":"value2"}','$.key1');
+--------------------------------------------+
| JSON_EXTRACT('{"key1":"value1", "key2":"value2"}','$.key1') |
+--------------------------------------------+
| "value1"                                         |
+--------------------------------------------+
  • ->, ->>

->与JSON_EXTRACT()函数作用相同,->>在前者的基础上去除了结果的双引号

insert into t1(jdoc) values ('[10, 20, [30, 40]]');
SELECT jdoc, jdoc->'$[1]' from t1; 
--结果:20

insert into t1(jdoc) values ('{"key1":"value1", "key2":"value2"}');
SELECT jdoc, jdoc->'$.key1' from t1; 
--结果:"value1"

SELECT jdoc, jdoc->>'$.key1' from t1; 
--结果:value1
  • JSON_REMOVE

从json数据内移除对应路径的值

SET @j = '["a", ["b", "c"], "d"]';
SELECT JSON_REMOVE(@j, '$[1]');
+-------------------------+
| JSON_REMOVE(@j, '$[1]') |
+-------------------------+
| ["a", "d"]              |
+-------------------------+

SET @j = '{"key1":"value1", "key2":"value2"}';
SELECT JSON_REMOVE(@j, '$.key1');
+-------------------------+
| JSON_REMOVE(@j, '$.key1') |
+-------------------------+
| {"key2":"value2"}         |
+-------------------------+

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值