Mysql JSON对象和JSON数组查询

article/2025/11/7 4:38:36

文章目录

      • 1. 函数说明
      • 2. JSON对象
      • 3. 字符串JSON数组
          • 3.1 AND关系
          • 3.2 OR关系
      • 4. 对象数组
      • 5. 集成 Mybatis plus
      • 6. 模糊查询
      • 7. json_table
          • 7.1 分组计算总数
          • 7.2 对象去重

在这里插入图片描述
file_type可以是 varchar,也可以是 json类型

1. 函数说明

JSON_CONTAINS(json_doc, val[, path]):判断是否包含某个json值

JSON_ARRAY([val[, val] ...]):创建json数组

2. JSON对象

{"key": 1, "name": "万飞"}

查询

SELECT * FROM `ak_file_config` where file_type -> '$.name' = "万飞"

在这里插入图片描述

3. 字符串JSON数组

3.1 AND关系
["EXE", "白加黑", "DLL"]

查询

SELECT * FROM `ak_file_config` where JSON_CONTAINS(file_type, JSON_ARRAY("白加黑","DLL"))

在这里插入图片描述

3.2 OR关系
SELECT * FROM `ak_file_config` where JSON_CONTAINS(file_type,'"DLL"') OR JSON_CONTAINS(file_type,'"EXE"')

在这里插入图片描述

4. 对象数组

参考 https://wenku.baidu.com/view/0831b7cc6194dd88d0d233d4b14e852459fb3958?aggId=0831b7cc6194dd88d0d233d4b14e852459fb3958

5. 集成 Mybatis plus

// jsonArray查询
.apply(CollUtil.isNotEmpty(query.getFileType()), StrUtil.format("JSON_CONTAINS(t.file_type, JSON_ARRAY({}))",// 设置占位符{0},{1},{2}IntStream.range(0, Optional.ofNullable(query.getFileType()).orElse(Collections.emptyList()).size()).mapToObj(i -> "{".concat(String.valueOf(i)).concat("}")).collect(Collectors.joining(","))),Optional.ofNullable(query.getFileType()).orElse(Collections.emptyList()).toArray())

参考 https://blog.csdn.net/qq_31832209/article/details/125374325

6. 模糊查询

SELECT* 
FROM`ak_file_config` 
WHEREJSON_EXTRACT(file_type, '$' ) LIKE '%DL%';

在这里插入图片描述
代码里参考

String productOrCompanyName = query.getProductOrCompanyName().replace("\"", "_");.and(StrUtil.isNotBlank(productOrCompanyName),wq -> wq.apply("JSON_EXTRACT(LOWER(t.label_involve_product), '$') LIKE LOWER(CONCAT('%', {0}, '%'))", productOrCompanyName).or().apply("JSON_EXTRACT(LOWER(t.label_involve_company), '$') LIKE LOWER(CONCAT('%', {0}, '%'))", productOrCompanyName))

如果输入字符串带双引号,需要将\"替换成_进行模糊搜索,但是会查询出不带双引号的数据

7. json_table

mysql最低版本8.0.4

7.1 分组计算总数
SELECT* 
FROMJSON_TABLE ( '["11", "22"]', '$[*]' COLUMNS ( NESTED PATH '$' COLUMNS ( result INT PATH '$' ) ) ) AS t;

在这里插入图片描述
json对象数组参考 https://cdn.modb.pro/db/484630

在表中关联字符串数组分组查询
在这里插入图片描述
需求:统计各类型的数量

SELECTt1.result,count( t1.result ) AS count 
FROMpe_main_body tINNER JOIN JSON_TABLE ( t.overview_product_type, '$[*]' COLUMNS ( NESTED PATH '$' COLUMNS ( result VARCHAR ( 100 ) PATH '$' ) ) ) AS t1 
WHEREdel_flag = FALSE 
GROUP BYt1.result

在这里插入图片描述

7.2 对象去重

在这里插入图片描述
例如:match_context字段是对象数组,对象里面有两个字段keyWorddescribe

需求:查询出所有的不重复的对象

SELECT DISTINCTt1.result 
FROMii_sensitive_resource_info tINNER JOIN JSON_TABLE ( t.match_context, '$[*]' COLUMNS ( NESTED PATH '$' COLUMNS ( result JSON PATH '$' ) ) ) AS t1 
WHEREcompany_id IN ( 296 )

DISTINCT:去重

在这里插入图片描述
改为字段返回

SELECTresult ->> '$.keyWord' AS keyWord,result ->> '$.describe' AS descInfo 
FROM(SELECT DISTINCTt1.result FROMii_sensitive_resource_info tINNER JOIN JSON_TABLE ( t.match_context, '$[*]' COLUMNS ( NESTED PATH '$' COLUMNS ( result JSON PATH '$' ) ) ) AS t1 
WHEREcompany_id IN ( 296 )) tmp

在这里插入图片描述

->>:会去除双引号


http://chatgpt.dhexx.cn/article/UsXS4AEf.shtml

相关文章

Json对象和Json字符串的区别

Json对象和Json字符串的区别 </h1><div class"clear"></div><div class"postBody"><div id"cnblogs_post_body" class"blogpost-body blogpost-body-html">1、Json概念 概念&#xff1a;JSON (JavaSc…

获取json对象的key

获取json对象的key值 我有一个json对象&#xff0c;我想获取每一个学生的信息&#xff0c;但是每次拿到的数据最外层的key值是随学生人数增加而变化的&#xff0c;并不是固定的。 所以我的思路为&#xff1a;先获取最外层的key&#xff0c;然后根据key获取value。 实现过程如下…

js操作json对象

工作中做了几款自动化测试工具都是跟日志读取相关&#xff0c;日志格式又大多数都是JSON&#xff0c;所以这里把常用的JS操作JSON的方法做了总结&#xff1a; 一、概念简介 JSON(JavaScript Object Notation) 是一种轻量级的数据交换格式&#xff0c;采用完全独立于语言的文本格…

嵌套 JSON 对象中的数组

JSON 对象中数组可以包含另外一个数组&#xff0c;或者另外一个 JSON 对象&#xff1a; var myObj {"name":"网站","num":3,"sites": [{ "name":"Google", "info":[ "Android", "Googl…

Js 给JSON对象排序

众所周知&#xff0c;json对象是没有顺序的。只有数组才有排序功能。 但我们遇到的业务场景里面&#xff0c;不仅仅需要对数组排序&#xff0c;也有需要对对象排序的情况。 例如下面这种数据&#xff1a; let data {zhangsan: {age: 18, height: 189}, lisi: {age: 18, hei…

嵌套 json对象

什么是嵌套json对象&#xff1f; ---- JSON 对象中可以包含另外一个 JSON 对象 你可以使用点号(.)或者中括号([])来访问嵌套的 JSON 对象。 <script>// 嵌套 json对象var myjson {"name":"老李","keywords":[狗,熊,李],"site"…

JSON对象

开发工具与关键技术&#xff1a;VS MVC 作者&#xff1a;冉冉 撰写时间&#xff1a;2019年05月21日Json是JavaScript对象方法它的全称为&#xff1a;JavaScript Object Notation。Json是存储和交换文本信息的语法&#xff1a; 1、 JSON是轻量级的文本数据交换格式&#xff1b; …

利用matlab使用窗函数,MATLAB中的窗函数

如何在MATLAB中使用窗函数 2008年05月23日星期五10:19 一、在MATLAB 中的窗函数,十分简单&#xff1a; (1)矩形窗(Rectangle Window)调用格式&#xff1a;wboxcar(n)&#xff0c;根据长度n 产生一个矩形窗w。 (2)三角窗(Triangular Window)调用格式&#xff1a;wtriang(n)&…

Blackman 窗函数

Blackman 窗函数 由于计算机无法对无限长的信号进行FFT运算&#xff0c;所以我们截取有限长序列进行分析&#xff0c;但这种做法会产生频谱能量泄露。采用窗函数来截取信号能够减少频谱能量泄露&#xff0c;不同的窗函数会对频谱泄露产生不同的抑制效果。其中&#xff0c;余弦窗…

fft 窗函数特性对比

fft 窗函数特性 窗名称主瓣宽度旁瓣相对衰减&#xff08;旁瓣抑制&#xff09;旁瓣能量占比最大值&#xff08;32个点时&#xff09;最小值&#xff08;32个点时&#xff09;hamming(symmetric)4.3125*谱线间隔-41.8dB0.04%0.99760.0800hamming(periodic)4.0625*谱线间隔-41.8d…

Oracle开窗函数

SQL开窗函数 开窗函数&#xff1a;在开窗函数出现之前存在着很多用 SQL 语句很难解决的问题&#xff0c;很多都要通过复杂的相关子查询或者存储过程来完成。为了解决这些问题&#xff0c;在 2003 年 ISO SQL 标准加入了开窗函数&#xff0c;开窗函数的使用使得这些经典的难题可…

matlab的汉明窗函数如何导出,时域窗函数

时域窗函数 数字信号处理领域&#xff0c;“窗”是用处广泛意义重大的一个数学模型。我觉得很有必要来探究一下它的本质&#xff0c;所以在这篇文章里先给出常见的几种时域窗函数的数学模型&#xff0c;我将在后面的文章里陆续讲出窗的用途。 本文将陆续介绍如下几个窗&#xf…

窗函数作用和性质

文章目录 什么是窗函数&#xff1f;窗函数的作用是什么&#xff1f;1.防止泄露2. 分析意义 有哪些常用的窗函数&#xff1f;它们特点是什么&#xff1f;RectangularHanningHammingBlackmanBlackman-Harris 总结 什么是窗函数&#xff1f; 窗函数能够产生一段特定的信号&#x…

什么是窗函数?

本文转自https://zhuanlan.zhihu.com/p/24318554 主要内容包括&#xff1a; 1. 为什么要加窗函数&#xff1b; 2. 窗函数的定义&#xff1b; 3. 窗函数的时频域特征&#xff1b; 4. 加窗函数的原则&#xff1b; 5. 模态测试所用窗函数&#xff1b; 6. 窗函数带来的影响。…

窗函数总结

参考链接 文中第一、二节参考链接&#xff1a; 什么是泄漏&#xff1f; 文中第三节参考链接&#xff1a; 何时、何地应用何种的窗函数? 文中第四、五节参考链接&#xff1a; 窗函数概念知识点统计_teresa_zp的博客-CSDN博客_窗的主瓣宽度 一、为什么加窗 1. 周期函数的…

驱动irq

http://www.wowotech.net/irq_subsystem/irq-domain.html wowokeji 涉及目录: kernel/irq/ irqdomain.c irqdesc.c proc.c manage.c request_irq_thread定义 drivers/irqchip.c irq-gic.c&#xff08;v2&#xff09; irq-gic-common.c drivers/of/irq.c

irqbalance机制分析

本文档基于irqbalance-1.5.0 源码链接&#xff1a;https://launchpad.net/ubuntu/source/irqbalance/ 1. object tree Irqbalance是用户空间用于优化中断的一个工具&#xff0c;通过周期性的&#xff08;默认10s&#xff09;统计各个cpu上的中断情况&#xff0c;重新对中断进…

request_irq()

原文地址&#xff1a;http://blog.csdn.net/wealoong/article/details/7566546 一、中断注册方法 在Linux内核中用于申请中断的函数是request_irq&#xff08;&#xff09;&#xff0c;函数原型在Kernel/irq/manage.c中定义&#xff1a; int request_irq(unsigned int irq, ir…

linux IRQ Management(六)- DTS及调试

了解DTS Interrupt 设置方式。 1.DTS 中 interrupt 描述 interrupt-controller - 一个空的属性定义&#xff0c; 该节点作为一个接收中断信号的设备。 #interrupt-cells - 这是一个中断控制器节点的属性。它声明了该中断控制器的中断指示符中 cell 的个数&#xff08;类似于 …

Linux IRQ number和中断描述符

一、前言 本文主要围绕IRQ number和中断描述符&#xff08;interrupt descriptor&#xff09;这两个概念描述通用中断处理过程。第二章主要描述基本概念&#xff0c;包括什么是IRQ number&#xff0c;什么是中断描述符等。第三章描述中断描述符数据结构的各个成员。第四章描述…