Mysql 查询JSON结果的相关函数汇总

JSON 格式字段是 Mysql 5.7 新加的属性,不够它本质上以字符串性质保存在库中的,刚接触时我只了解 $.xx 查询字段的方法,因为大部分时间,有这个就够了,其他交给程序就行了,但是最近一些操作需要更复杂的查询操作,所以赶紧了解下更多的方法。

JSON_EXTRACT(json_doc [,path])

查询字段

mysql> set @j = '{"name":"wxnacy"}';
mysql> select JSON_EXTRACT(@j, '$.name');
+----------------------------+
| JSON_EXTRACT(@j, '$.name') |
+----------------------------+
| "wxnacy"   |
+----------------------------+

还有一种更简洁的方式,但是只能在查询表时使用

mysql> select ext -> '$.name' from test;
+-----------------+
| ext -> '$.name' |
+-----------------+
| "wxnacy" |
+-----------------+

在 $. 后可以正常的使用 JSON 格式获取数据方式,比如数组

mysql> set @j = '{"a": [1, 2]}';
mysql> select JSON_EXTRACT(@j, '$.a[0]');
+----------------------------+
| JSON_EXTRACT(@j, '$.a[0]') |
+----------------------------+
| 1    |
+----------------------------+

JSON_DEPTH(json_doc)

计算 JSON 深度,计算方式 {} [] 有一个符号即为一层,符号下有数据增加一层,复杂 JSON 算到最深的一次为止,官方文档说 null 值深度为 0,但是实际效果并非如此,列举几个例子

JSON_LENGTH(json_doc [, path])

计算 JSON 最外层或者指定 path 的长度,标量的长度为1。数组的长度是数组元素的数量,对象的长度是对象成员的数量。

mysql> SELECT JSON_LENGTH('[1, 2, {"a": 3}]');
+---------------------------------+
| JSON_LENGTH('[1, 2, {"a": 3}]') |
+---------------------------------+
|    3 |
+---------------------------------+
mysql> SELECT JSON_LENGTH('{"a": 1, "b": {"c": 30}}');
+-----------------------------------------+
| JSON_LENGTH('{"a": 1, "b": {"c": 30}}') |
+-----------------------------------------+
|     2 |
+-----------------------------------------+
mysql> SELECT JSON_LENGTH('{"a": 1, "b": {"c": 30}}', '$.b');
+------------------------------------------------+
| JSON_LENGTH('{"a": 1, "b": {"c": 30}}', '$.b') |
+------------------------------------------------+
|      1 |
+------------------------------------------------+

JSON_TYPE(json_doc)

返回一个utf8mb4字符串,指示JSON值的类型。 这可以是对象,数组或标量类型,如下所示:

mysql> SET @j = '{"a": [10, true]}';
mysql> SELECT JSON_TYPE(@j);
+---------------+
| JSON_TYPE(@j) |
+---------------+
| OBJECT |
+---------------+
mysql> SELECT JSON_TYPE(JSON_EXTRACT(@j, '$.a'));
+------------------------------------+
| JSON_TYPE(JSON_EXTRACT(@j, '$.a')) |
+------------------------------------+
| ARRAY    |
+------------------------------------+
mysql> SELECT JSON_TYPE(JSON_EXTRACT(@j, '$.a[0]'));
+---------------------------------------+
| JSON_TYPE(JSON_EXTRACT(@j, '$.a[0]')) |
+---------------------------------------+
| INTEGER    |
+---------------------------------------+
mysql> SELECT JSON_TYPE(JSON_EXTRACT(@j, '$.a[1]'));
+---------------------------------------+
| JSON_TYPE(JSON_EXTRACT(@j, '$.a[1]')) |
+---------------------------------------+
| BOOLEAN    |
+---------------------------------------+

可能的返回类型

纯JSON类型:

  • OBJECT:JSON对象
  • ARRAY:JSON数组
  • BOOLEAN:JSON真假文字
  • NULL:JSON null文字

数字类型:

  • INTEGER:MySQL TINYINT,SMALLINT,MEDIUMINT以及INT和BIGINT标量
  • DOUBLE:MySQL DOUBLE FLOAT标量
  • DECIMAL:MySQL DECIMAL和NUMERIC标量

时间类型:

  • DATETIME:MySQL DATETIME和TIMESTAMP标量
  • 日期:MySQL DATE标量
  • TIME:MySQL TIME标量

字符串类型:

STRING:MySQL utf8字符类型标量:CHAR,VARCHAR,TEXT,ENUM和SET

二进制类型:

BLOB:MySQL二进制类型标量,包括BINARY,VARBINARY,BLOB和BIT

所有其他类型:

OPAQUE(原始位)

JSON_VALID

返回0或1以指示值是否为有效JSON。 如果参数为NULL,则返回NULL。

mysql> SELECT JSON_VALID('{"a": 1}');
+------------------------+
| JSON_VALID('{"a": 1}') |
+------------------------+
|   1 |
+------------------------+
mysql> SELECT JSON_VALID('hello'), JSON_VALID('"hello"');
+---------------------+-----------------------+
| JSON_VALID('hello') | JSON_VALID('"hello"') |
+---------------------+-----------------------+
|   0 |   1 |
+---------------------+-----------------------+

以上就是Mysql 查询JSON结果的相关函数汇总的详细内容,更多关于MySQL json函数的资料请关注我们其它相关文章!

(0)

相关推荐

  • Mysql 查询JSON结果的相关函数汇总

    JSON 格式字段是 Mysql 5.7 新加的属性,不够它本质上以字符串性质保存在库中的,刚接触时我只了解 $.xx 查询字段的方法,因为大部分时间,有这个就够了,其他交给程序就行了,但是最近一些操作需要更复杂的查询操作,所以赶紧了解下更多的方法. JSON_EXTRACT(json_doc [,path]) 查询字段 mysql> set @j = '{"name":"wxnacy"}'; mysql> select JSON_EXTRACT(@j,

  • mysql查询字段类型为json时的两种查询方式

    表结构如下: id varchar(32) info json 数据: id = 1 info = {"age": "18","disname":"小明"} -------------------------------------------- 现在我需要获取info中disanme的值,查询方法有: 1. select t.id,JSON_EXTRACT(t.info,'$.disname') as disname fro

  • MySQL中查询json格式的字段实例详解

    工作开发过程遇到一个需求:需要动态存储客户的姓名.手机号码.身份证.证件类型,意思是可能前端会传一个人或二个人或者三个人的信息是动态的不固定人数的四个字段(姓名.手机号码.身份证.证件类型). 前端页面如下: 我是使用List来接收前端传过来 json,mysql 用 varchar 来保存这个 json 数组 [{ "cardId": "110101199003072316", "cstName": "张双儿1", &quo

  • python查询mysql,返回json的实例

    如下所示: import MySQLdb import json def getSql(): try: con = MySQLdb.connect(host='localhost', user='', passwd='', db='test', charset='utf8') cursor = con.cursor() sql = "select * from user" cursor.execute(sql) results = cursor.fetchmany(5) users =

  • MySQL查询语法汇总

    前言: 本篇文章主要简介下MySQL中where,group by ,order by ,limit,join,union ,union all,子表等查询语法. 测试数据准备 create table emp ( empno numeric(4) not null, ename varchar(10), job varchar(9), mgr numeric(4), hiredate datetime, sal numeric(7, 2), comm numeric(7, 2), deptno

  • MySql模糊查询json关键字检索方案示例

    目录 前言 方案一: 方案二: 方案三: 方案四(最终采用方案): 总结 前言 ​最近在项目中遇到这样一个需求:需要在数据表中检索包含指定内容的结果集,该字段的数据类型为text,存储的内容是json格式,具体表结构如下: CREATE TABLE `product` ( `id` INT(11) UNSIGNED NOT NULL AUTO_INCREMENT COMMENT 'ID', `name` VARCHAR(100) NOT NULL DEFAULT '' COMMENT '产品名称

  • mysql根据json字段内容作为查询条件(包括json数组)检索数据

    最近用到了mysql5.7的json字段的检索查询,发现挺好用的,记录一下笔记我们有一个日志表,里面的data字段是保存不同对象的json数据,遇到想根据里面的json的字段内容作为条件查询的情况 mysql根据json字段的内容检索查询数据 使用 字段->'$.json属性'进行查询条件 使用json_extract函数查询,json_extract(字段,"$.json属性") 根据json数组查询,用JSON_CONTAINS(字段,JSON_OBJECT('json属性'

  • MySQL对JSON类型字段数据进行提取和查询的实现

    目录 前言 1. 问题现象 2. 解决方案 3. JSON数据查询 3.1 一般基础查询操作 3.2 一般函数查询操作 4. JSON数据新增更新删除 前言 昨天上线后通过系统报警发现了一个bug,于是紧急进行了回滚操作,但是期间有用户下单,数据产生了影响,因此需要排查影响了哪些订单,并对数据进行修复. 1. 问题现象 由于bug导致了订单表的customer_extra_info字段的hasFreightInsurance误更新成了“是”,因此需要查询回滚前一共有多少被误更新为“是”的订单,如

  • MySQL条件查询语句常用操作全面汇总

    目录 模糊查询 union 排序 数量限制 分组 综合 顾名思义, 条件查询就是使用where字句 , 将满足条件的数据筛选出来 语法 : select < 结果 > from < 表名 > where < 条件 > 这里我们以t_user表为例 -- 查询性别为男的信息 SELECT * FROM t_user WHERE sex='男' -- 查询性别不为男的信息 SELECT * FROM t_user WHERE NOT sex='男' -- 查询性别为男并且年

  • php+mysql查询实现无限下级分类树输出示例

    本文实例讲述了php+mysql查询实现无限下级分类树输出.分享给大家供大家参考,具体如下: 这里介绍的php结合mysql查询无限下级树输出,其实就是无限分类.给各位整理了几个php无限分类的例子. 树输出: function get_array($user_id,$top=0){ global $mysql,$_G; $sql = "select user_id as name from `{spreads_users}` where p1.spreads_userid='{$user_id

随机推荐