我的编程空间,编程开发者的网络收藏夹
学习永远不晚

Mysql JSON对象和JSON数组查询

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

Mysql JSON对象和JSON数组查询

文章目录


在这里插入图片描述
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

在这里插入图片描述

->>:会去除双引号

8. JSONArray查询

  • JSONArray 符号是$[*]$[0]是数组对象时,不能查询所有,老版本不支持$[*],使用新版本
  • JSONObject 符号是 $
8.1 模糊查询
SELECT * FROM `tf_cloud`.`tf_low_data_testUser` WHERE  `address`->'$[0].name' LIKE "%b%"

在这里插入图片描述

8.2 等值匹配
SELECT * FROM `tf_cloud`.`tf_low_data_testUser` WHERE  `address`->'$[0].name' = "bbb"

在这里插入图片描述

8.3 时间搜索
SELECT * FROM `tf_cloud`.`tf_low_data_testUser` WHERE CAST(JSON_UNQUOTE(`address`->'$[0].date') AS DATETIME) BETWEEN '2023-08-13' AND '2023-08-17'

在这里插入图片描述

8.4 在列表
SELECT * FROM `tf_cloud`.`tf_low_data_testUser` WHERE  `address`->'$[0].name' IN ("bbb","ccc")

在这里插入图片描述

8.5 包含
SELECT * FROM `tf_cloud`.`tf_low_data_testUser` WHERE  json_contains(`address`->"$[*].nickname",'["bbb"]')

在这里插入图片描述

来源地址:https://blog.csdn.net/qq_38983728/article/details/126144608

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

Mysql JSON对象和JSON数组查询

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

MySQL对JSON数据进行查询

MySQL根据JSON字段的内容检索查询数据 使用 字段 -> ‘$.json’ 属性’ 进行查询条件 以下这两种会快很多,可以自己测试 使用 json_extract 函数查询,json_extract(字段, “$.json
2023-08-16

mysql怎么查询json字段数组

MySQL查询JSON数组字段本文介绍了使用MySQL查询JSON数组字段的多种方法,包括JSON_EXTRACT、JSON_TABLE、->运算符和JSON_QUERY函数。此外,还提供了使用数组索引和过滤器来访问特定数组元素或过滤数组元素的示例。通过示例和最佳实践,本文为理解和查询JSON数组字段提供了全面的指南。
mysql怎么查询json字段数组
2024-04-14

javascript json对象转换数组

在前端开发中,我们经常会涉及到 JavaScript 对象和数组的转换。其中,一种常见的场景是将 JSON 对象转换为数组。在本文中,我们将探讨如何使用 JavaScript 中的方法将 JSON 对象转换为数组。JSON 是一种轻量级的数据交换格式,其格式简单,易于阅读和编写。在 JavaScript 中,我们可以使用内置 JSON 对象来处理 JSON 数据。通常,我们会使
2023-05-14

mysql怎么查询json数组的一个值

MySQL提供了多种方法来查询JSON数组中的值,具体方法取决于您想要获取的值的类型和位置。本文介绍了使用JSON_EXTRACT()、JSON_UNQUOTE()/JSON_VALUE()和->运算符等函数的详细方法。此外,还介绍了JSON_ARRAY_LENGTH()、JSON_SEARCH()和JSON_ARRAY()等其他辅助函数。
mysql怎么查询json数组的一个值
2024-04-14

php json如何转换成对象数组对象

这篇文章主要介绍“php json如何转换成对象数组对象”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“php json如何转换成对象数组对象”文章能帮助大家解决问题。将json数据转换成对象使用js
2023-07-05

Java怎么将String转换成json对象或json数组

本篇内容介绍了“Java怎么将String转换成json对象或json数组”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!将String转换成
2023-06-29

json对象数组格式是什么

JSON对象数组格式是一个包含多个JSON对象的数组。每个JSON对象都是一个键值对的集合,其中键是字符串,值可以是字符串、数字、布尔值、对象或数组。JSON对象数组使用方括号 [] 包围,每个对象之间用逗号分隔。例如:```[{"name
2023-08-16

如何在 Java 中获取 JSON 数组对象的值?(java怎么获取json数组对象的值)

在Java开发中,处理JSON数据是一项常见的任务。JSON(JavaScriptObjectNotation)是一种轻量级的数据交换格式,常用于前后端数据交互。本文将详细介绍在Java中如何获取JSON数组对象的值。一、导入相关库
如何在 Java 中获取 JSON 数组对象的值?(java怎么获取json数组对象的值)
Javajson2024-12-18

Mysql怎么对json数据进行查询及修改

这篇文章主要介绍“Mysql怎么对json数据进行查询及修改”,在日常操作中,相信很多人在Mysql怎么对json数据进行查询及修改问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”Mysql怎么对json数据进
2023-07-02

编程热搜

目录