首页 > 数据库 >Mysql json数组解析方法

Mysql json数组解析方法

时间:2023-06-01 14:57:40浏览次数:51  
标签:work name address JSON json Mysql 解析 EXTRACT

一、背景

在表job_position需要对json数组进行解析,查找json数组对象中的数据

 首先想到查找mysql的关于json的函数,这边做个记录。

二、解决方案

2.1 JSON_EXTRACT(json字段,'$.属性名称')

需要了解函数 JSON_EXTRACT(json_docpath[, path] ...) 

 从json中提取数据,JSON_EXTRACT(json字段,'$.属性名称'),解析正常则返回对应键的值,否则返回null值

比如(官方例子)

mysql> SELECT c, JSON_EXTRACT(c, "$.id"), g
     > FROM jemp
     > WHERE JSON_EXTRACT(c, "$.id") > 1
     > ORDER BY JSON_EXTRACT(c, "$.name");
+-------------------------------+-----------+------+
| c                             | c->"$.id" | g    |
+-------------------------------+-----------+------+
| {"id": "3", "name": "Barney"} | "3"       |    3 |
| {"id": "4", "name": "Betty"}  | "4"       |    4 |
| {"id": "2", "name": "Wilma"}  | "2"       |    2 |
+-------------------------------+-----------+------+
3 rows in set (0.00 sec)

随便写的例子

SELECT JSON_EXTRACT('{"name":"zhangsan","userCode":"oa123456"}','$.name');

 那对于json数组的解析呢???

比如json数组 [{"name":"zhangsan","userCode":"oa123456"},{"name":"lisi","userCode":"oa222222"}]

用上面的方式肯定不行

 ----------让我想想-----

2.2 JSON_EXTRACT(json数据, '$[数组下标].json属性名称')

使用 JSON_EXTRACT(json数据, '$[数组下标].json属性名称')

例子如下

SELECT JSON_EXTRACT(' [{"name":"zhangsan","userCode":"oa123456"},{"name":"lisi","userCode":"oa222222"}]','$[0].name') NAME;

 如果是 JSON_EXTRACT(json数据, '$[*].json属性名称') 则会返回数组

SELECT JSON_EXTRACT(' [{"name":"zhangsan","userCode":"oa123456"},{"name":"lisi","userCode":"oa222222"}]','$[*].name') NAME;

3.mysql中数组包含某个元素的方法

SELECT '北京' member of('["天津","北京"]')

结果存在则返回1,否则返回0

 

 

查询某个城市是否包含在work_address 工作地点的json数组中

SELECT id,company_code,position_name,
JSON_EXTRACT(work_address,'$[*].cityName'),
JSON_EXTRACT(work_address,'$[0].cityName') AS work_address_city1,
JSON_EXTRACT(work_address,'$[1].cityName') AS work_address_city2,
work_address
FROM job_position WHERE '北京市' member of(JSON_EXTRACT(work_address,'$[*].cityName')); 

结果:

 关于mysql json解析的函数还有可以查看官方文档

比如

JSON_CONTAINS(json_doc, val[, path])  查询json是否包含某个元素

JSON_CONTAINS_PATH(json_doc, one_or_all, path[, path] ...)  查询是否存在指定路径,存在则返回1,否则返回0。

 ......

 

mysql官方json介绍文档:https://dev.mysql.com/doc/refman/5.7/en/json-search-functions.html

标签:work,name,address,JSON,json,Mysql,解析,EXTRACT
From: https://www.cnblogs.com/zluckiy/p/17448895.html

相关文章

  • mysql主从复制
    mysql主从复制mysql主从复制的分类全同步复制在全同步复制中,主库(master)写数据到二进制日志(binlog)且同步(sync),所有从库请求二进制日志(slaverequestbinlog)后写入中断日志(relay-log)并flushdisk,并且应用完日志且commit。理解︰当主提交一个事务,在主库向前端业......
  • MySQL视图
    一:视图概述1:为什么使用视图视图可以帮我们使用表的一部分而不是所有的表,另一方面也可以针对不同的用户制定不同的查询视图。比如,针对一个公司的销售人员,我们只想给他看部分数据,而某些特殊的数据,比如采购的价格,则不会提供给他。再比如,人员薪酬是个敏感的字段,那么只给某个级别......
  • Navicat远程链接mysql数据库问题
    问题描述:docker安装mysql数据后使用Navicat链接mysql后,创建数据库报“1044-Accessdenidforuser'root'...”解决方案:1.登录远程服务器,进入mysql容器dockerexec-itmysql/bin/bash2.mysql-uroot-p->grantallprivilegeson*.*to'root'@'%';->flush......
  • 创建,增加,删除mysql表分区
    http://www.2cto.com/database/201503/380348.htmlhttps://wenku.baidu.com/view/629d6cf4ddccda38366baf57.htmlMySQL的表分区详解-查看分区数据量,查看全库数据量 SELECTpartition_namepart,partition_expressionexpr,partition_descriptiondescr,table_rows......
  • json.dumps(),json.loads(),json.dump(),json.load()方法的区别(python)
    1.json.dumps()json.dump()是将字典类型转化成字符串类型。importjsondic={'a':'1111','b':'2222','c':'3333','d':'4444'}st=json.dumps(dic)print("我是字典类型的",dic)print("我是字......
  • Mysql的存储过程
    一.存储过程的定义:存储过程(StoredProcedure)是在大型数据库系统中,一组为了完成特定功能的SQL语句集,经编译后存储在数据库中,用户通过指定存储过程的名字并给出参数(如果该存储过程带有参数)来执行它。二. 存储过程的优点:简化应用开发人员的工作。当用不同语言编写多客户......
  • mysql重复记录处理
    这里记录一下用到的语句和语句模板:--查询出重复的数据SELECTCOUNT(*)asrepeats,address,signer_name,signer_mobileFROMuser_operation_useraddressGROUPBYaddress,signer_name,signer_mobileHAVINGrepeats>1;--查询出重复的数据中最小的idSELECTMIN(......
  • 高频面试题|如何解决MySQL主从复制延时问题
    作者:楼仔来源:https://mp.weixin.qq.com/s/Jfrp-pLH_nfzKzwU-6gY5w这篇文章是去年写的,但是阅读量很低,不想让好的文章被埋没,重新整理后,可读性更强,文末有上周六技术派直播视频。MySQL主从一直是面试常客,里面的知识点虽然基础,但是能回答全的同学不多。比如我之前面试小米,就被问......
  • MySQL数据库10秒内插入百万条数据
    publicclassBaseDao{//静态工具类,用于创建数据库连接对象和释放资源,方便调用//导入驱动jar包或添加Maven依赖(这里使用的是Maven,Maven依赖代码附在文末)static{try{Class.forName("com.mysql.cj.jdbc.Driver");}catch(Cla......
  • k8s存储服务解析
    卷访问模式             卷的subpath设置            存储卷的动态供给         因为storage自动创建pv需要经过kube-apiserver,所以需要授权    创建动态供给的deployment    需要一个deployme......