Mysql-操作json

  • 表结构 

CREATE TABLE `jsonuse` (
  `data` json DEFAULT NULL,
  `id` int DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb3
 

  • JSON_OBJECT([KEY, val[, KEY, val] ...])

计算键值对列表(可能为空),并返回包含这些键值对的JSON对象。如果任何键名为NULL或参数为奇数(JSON_OBJECT里面的参数要为偶数),则会发生错误。

INSERT INTO jsonuse VALUES (JSON_OBJECT("name", "王五", "email", "wangwu@qq.com", "age",18),2 );

查看插入的数据:

  • JSON_KEYS(json_doc[, PATH]):

以JSON数组的形式返回JSON对象顶级值中的键,如果给定了path参数,则返回所选路径中的顶级键。返回NULL如果任何参数为NULL,
json_doc参数不是对象,或者path(如果给定)没有找到对象。如果json_doc参数不是有效的json文档,或者path参数不是有效的路径表达式,或者包含*或**通配符,则会发生错误。
如果选定对象为空,则结果数组为空。如果顶级值具有嵌套的子对象,则返回值不包括来自这些子对象的关键帧。
SELECT * FROM jsonuse WHERE id = 4
SELECT JSON_KEYS(DATA,'$.b'),DATA  FROM jsonuse WHERE id = 4 ;

 SELECT JSON_KEYS(DATA),DATA  FROM jsonuse WHERE id = 4 ;

  • JSON_EXTRACT(json_doc, PATH[, PATH] ...) 

返回JSON文档中的数据,从与路径参数匹配的文档部分中选择。如果任何参数为NULL或文档中没有找到值的路径,则返回NULL。如果json_doc参数不是有效的json文档,或者任何path参数都不是有效的路径表达式,则会发生错误。

返回值由路径参数匹配的所有值组成。如果这些参数可能返回多个值,则匹配的值将自动包装为数组,顺序与生成它们的路径对应。否则,返回值为单个匹配值。

整体数据:

SELECT JSON_EXTRACT(DATA, '$.name'),JSON_EXTRACT(DATA, '$.address') FROM jsonuse;

//使用ifnull找到所有data里面包含email属性的行

//关于mysql函数点击此链接

SELECT *  FROM jsonuse WHERE IFNULL (JSON_EXTRACT(DATA, '$.email'),NULL) IS NOT NULL

  • JSON_REMOVE(json_doc, PATH[, PATH] ...)

从JSON文档中删除数据并返回结果。如果任何参数为NULL,则返回NULL。如果json_doc参数不是有效的json文档,或者任何路径参数都不是有效的路径表达式,或者是$,或者包含*或**通配符,则会发生错误。

路径参数从左到右求值。通过计算一条路径生成的文档将成为计算下一条路径的新值。

如果文档中不存在要删除的元素,则不是错误;在这种情况下,路径不会影响文档。

整体数据:

SELECT JSON_REMOVE(DATA,'$.b')FROM jsonuse WHERE id = 4 ;

不会实际删除表中的值

  • JSON_LENGTH(json_doc[, path])

JSON_LENGTH(json_doc[, path])返回 JSON 文档的长度,或者,如果 path给定参数,则返回路径标识的文档中值的长度。NULL如果任何参数是 NULLpath 参数不标识文档中的值,则返回。json_doc如果参数不是有效的 JSON 文档或 path参数不是有效的路径表达式,则会发生错误。在 MySQL 8.0.26 之前,如果路径表达式包含一个*或 **通配符,也会引发错误。

SELECT JSON_LENGTH(data) FROM jsonuse WHERE id = 1;

 JSON_SET(json_doc, path, val[, path, val] ...)

现有对象中不存在的成员。该成员被添加到对象并与新值相关联。

超过现有数组末尾的位置。使用新值扩展数组。如果现有值不是数组,则将其自动包装为数组,然后使用新值进行扩展。

现有数据

 SELECT JSON_SET(data,'$.age',21) FROM jsonuse WHERE id = 1;

 SELECT JSON_SET(data,'$.interesr','playCompuate') FROM jsonuse WHERE id = 1;

JSON_INSERT(json_doc, path, val[, path, val] ...):插入值而不替换现有值。

  • 现有对象中不存在的成员。该成员被添加到对象并与新值相关联。

  • 超过现有数组末尾的位置。使用新值扩展数组。如果现有值不是数组,则将其自动包装为数组,然后使用新值进行扩展。

JSON_REPLACE(json_doc, path, val[, path, val] ...)。

  • 替换 JSON 文档中的现有值并返回结果。如果任何参数是 NULL 则 返回NULLjson_doc如果参数不是有效的 JSON 文档或任何path参数不是有效的路径表达式或包含 或通配符, 则会发生错误 。

JSON_ARRAYAGG(col_or_expr) [over_clause] 

将结果集聚合为单个 JSON数组,其元素由行组成。此数组中元素的顺序未定义。该函数作用于计算结果为单个值的列或表达式。NULL如果结果不包含行,或者发生错误,则 返回 。

over_clause从 MySQL 8.0.14 开始,如果存在 ,此函数将作为窗口函数执行。over_clause第 12.21.2 节,“窗口函数概念和语法”中所述。

SELECT JSON_ARRAYAGG(rolename) FROM sysrole

JSON_OBJECTAGG(key, value) [over_clause] 

将两个列名或表达式作为参数,其中第一个用作键,第二个用作值,并返回一个包含键值对的 JSON 对象。NULL如果结果不包含行,或者发生错误,则返回。NULL如果任何键名是或参数个数不等于 2, 则会发生错误。

over_clause从 MySQL 8.0.14 开始,如果存在 ,此函数将作为窗口函数执行

 SELECT JSON_OBJECT(id,rolename)FROM sysrole

 更多的json函数参考:MySQL :: MySQL 8.0 Reference Manual :: 12.18.1 JSON Function Reference

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值