mysql5.7获取json数组中的某个对象
前言
表中的一个字段类型是字符串,存的是一个对象数据。
现在要根据对象中的某个属性,获取到整个对象信息。
如果是mysql8,则可以使用JSON_TABLE。
示例:https://blog.csdn.net/weixin_44071721/article/details/123347229
select '[{"k": "1", "v": "https://www.bilibili.com/video/BV1dU4y147t8?from=search&seid=17686981769015229460&spm_id_from=333.337.0.0c", "desc": "提升排名视频课程"}, {"k": "1", "v": "https://www.bilibili.com/video/BV1xq4y1G7Mj?from=search&seid=272572936245601262&spm_id_from=333.337.0.0", "desc": "提升排名视频课程"}, {"k": "2", "v": "https://www.bilibili.com/video/BV1Sq4y1C7Jc?from=search&seid=272572936245601262&spm_id_from=333.337.0.0", "desc": "xxxx视频课程"}, {"k": "2", "v": "https://www.bilibili.com/video/BV1Ws411P7Nu?from=search&seid=272572936245601262&spm_id_from=333.337.0.0", "desc": "xxxx视频课程"}]' into @aa;
SELECT @aa;select*
fromjson_table(@aa,'$[*]' columns (k varchar(500) path '$.k',`v` varchar(500) path '$.v',`desc` varchar(500) path '$.desc')) as tt
where tt.k = 1
但是5.7的没找到相关函数。
解决办法
SET @content = '[{"id":"882310097019154331","val":"质量安全部关闭全部电源,桌面清理干净,整理好个人工位!"},{"id":"882310099668482231","val":"市场运营部关闭全部电源,桌面清理干净,整理好个人工位!"},{"id":"882310095679757656","val":"研发生产中心(上海)关闭全部电源,桌面清理干净,整理好个人工位!无需工作的电脑、笔记本、主机等机器关闭关停!"},{"id":"882310092710195768","val":"研发生产中心(成都)关闭全部电源,桌面清理干净,整理好个人工位!无需工作的电脑、笔记本、主机等机器关闭关停!"},{"id":"882310091462264051","val":"物资保障部关闭全部电源,桌面清理干净,整理好个人工位!"},{"id":"882310098660146571","val":"项目工程部部关闭全部电源,桌面清理干净,整理好个人工位!"},{"id":"882310095734354651","val":"综合管理部关闭全部电源,桌面清理干净,整理好个人工位!"},{"id":"882310093022062399","val":"财务金融部部关闭全部电源,桌面清理干净,整理好个人工位!储物间清理干净!"}]';set @keyword = '882310099668482231';-- 获取到当前参数在json中的哪一个对象里面,它的下标是多少
select JSON_SEARCH( @content, 'one', @keyword )-- 去除下标两边的双引号
select TRIM('"' FROM JSON_SEARCH( @content, 'one', @keyword ))-- 去除多余的.id,得到目标对象坐标
select SUBSTRING( TRIM('"' FROM JSON_SEARCH( @content, 'one', @keyword )), 1, LOCATE( '.id', TRIM('"' FROM JSON_SEARCH( @content, 'one', @keyword )) ) - 1 ) -- 使用坐标获取对象信息
select JSON_EXTRACT(@content, SUBSTRING( TRIM('"' FROM JSON_SEARCH( @content, 'one', @keyword )), 1, LOCATE( '.id', TRIM('"' FROM JSON_SEARCH( @content, 'one', @keyword )) ) - 1 ) )-- 把sql做成存储过程
DELIMITER //
CREATE PROCEDURE GetJsonValue(IN content TEXT, IN keyword TEXT)
BEGINDECLARE keyword_path TEXT;-- 移除 content 中的双引号,因为 JSON_SEARCH 返回带引号的字符串SET keyword_path = TRIM('"' FROM JSON_SEARCH(content, 'one', keyword));-- 使用 SUBSTRING 函数截取所需的路径,并返回结果SELECT JSON_EXTRACT(content, SUBSTRING(keyword_path, 1, LOCATE('.id', keyword_path) - 1));
END //
DELIMITER ;-- 测试存储过程(json字符为对象或者数组都可以)
CALL GetJsonValue(@content, '882310091462264051');
在xml中使用
SELECTa.hazard_registration_id, a.hazard_registration_code,a.STATUS, a.description, a.attachments,a.register_by, DATE_FORMAT(a.register_time, '%Y-%m-%d %H:%i:%s') AS registerTimeStr,f.tracking_by, f.hazard_tracking_id,e.risk_point_type,case when b.type = 1 then TRIM('"' from JSON_EXTRACT(c.contentdetail , '$.val'))when b.type = 2 then concat(e.risk_point_name,'-', d.risk_source_name)end as position,case when b.type = 1 then a.responsible_person_bywhen b.type = 2 then d.charge_personend responsiblePersonId
FROMtb_hazard_registration a
LEFT JOIN tb_hazard_investigation_plan b ON a.hazard_investigation_plan_id = b.hazard_investigation_plan_id
LEFT JOIN (SELECTx.content_id,JSON_EXTRACT(y.content, JSON_UNQUOTE(SUBSTRING(TRIM('"' FROM JSON_SEARCH(y.content, 'one', x.content_id)), 1, LOCATE('.id', TRIM('"' FROM JSON_SEARCH(y.content, 'one', x.content_id))) - 1))) AS contentdetailFROMtb_hazard_registration xINNER JOIN tb_hazard_investigation_plan y ON x.hazard_investigation_plan_id = y.hazard_investigation_plan_id
) c ON a.content_id = c.content_id
LEFT JOIN tb_risk_source d on b.type = 2 and JSON_EXTRACT(c.contentdetail , '$.riskSourceId') = d.risk_source_id
LEFT JOIN tb_risk_point e on b.type = 2 and JSON_EXTRACT(c.contentdetail , '$.riskPointId') = e.risk_point_id
LEFT JOIN tb_hazard_tracking f ON a.hazard_registration_id = f.hazard_registration_id相关文章:
mysql5.7获取json数组中的某个对象
前言 表中的一个字段类型是字符串,存的是一个对象数据。 现在要根据对象中的某个属性,获取到整个对象信息。 如果是mysql8,则可以使用JSON_TABLE。 示例:https://blog.csdn.net/weixin_44071721/article/details/123347229 sele…...
PTE考试解析
Pte 考试题目 注入漏洞 空格被过滤 用/**/代替空格,发现#被过滤 对#进行url编码为%23 输入构造好的payload http://172.16.12.100:81/vulnerabilities/fu1.php?id1%27)/**/and/**/11%23 http://172.16.12.100:81/vulnerabilities/fu1.php?id1%27)/*…...
UE4和C++ 开发-UE4怎么删除C++类
1 关闭visual stdio,关闭UE4引擎。 2 打开你的项目文件夹。找到你要删除的.h,.cpp文件删除。 3、删除Binaries文件夹。 4 右击.uproiect文件,点击Generate Visual Studio project files. 5 双击.uproiect文件,忽略警告打开就看到已经删除了想要删除的C类…...
基于图像识别的迁移学习之一
案例分析 加载数据部分同上一个案例,只需把数据输入到预训练的VGG-16或者ResNet50中。VGG-16的网络结构为右侧图绿色栏所示,其中block1中有2个包含64个卷积核的卷积层,block2包含2个128个卷积核的卷积层,block3有3个包含256个卷积…...
k8s使用
一、Kubernetes好处 kubernetes,是一个全新的基于容器技术的分布式架构领先方案,是谷歌严格保密十几年的秘密武器----Borg系统的一个开源版本,于2014年9月发布第一个版本,2015年7月发布第一个正式版本。 kubernetes的本质…...
HTML图片标签(2) HTML5+CSS3+移动web 前端开发入门笔记(三)
图片标签 HTML中,可以使用标签来插入图片。具体的语法为: <img src"图片路径" alt"替代文本">其中,src属性用于指定图片的路径,可以是相对路径或绝对路径。常见的有相对当前HTML文件的路径࿰…...
jwttoken+redis+springsecurity
思路 jwttoken不设置过期时间 redis管理过期时间,并且续签 redis中key"login:"userId, valuejwtUser 再次访问时,解析token中userId,并且根据过期时间自动续签JWT 实现登录认证 Token 自动续期方案 pom文件配置 <!--Redis--&…...
asp.net会议预约管理系统VS开发sqlserver数据库web结构c#编程Microsoft Visual Studio
一、源码特点 asp.net 会议预约管理系统 是一套完善的web设计管理系统,系统具有完整的源代码和数据库,系统主要采用B/S模式开发。开发环境为vs2010,数据库为sqlserver2008,使用c#语 言开发 asp.net 会议预约管理系统 二、…...
十六、【橡皮擦工具组】
文章目录 橡皮擦背景橡皮擦1. 一次取样2. 连续取样3. 取样背景色板 魔术橡皮擦 橡皮擦 橡皮擦跟我们平常生活中所用的橡皮擦是一样,它是将图层的内容擦除,只剩下空白部分。另外当我们按住Alt的键去擦除空白部分的时候,也可以将背景的部分显示出来。 另…...
BAT学习——计算当前路径下指定格式文件的MD5值,将文件名与MD5值写入文本
将以下内容粘贴到bat脚本中,双击运行,生成MD5.txt文件,需要其他格式,修改循环中的.rar 多个格式使用or分开 *.rar or *.bat脚本内容 echo off setlocal enabledelayedexpansionrem 设置输出文件名 set "outputFileMD5.txt&…...
排序算法(stable_sort(), sort())
sort函数我相信大家都不陌生,今天介绍一个新的排序算法stable_sort stable_sort:稳定排序算法,维持相等元素的原有顺序。 stable_sort 假如我们定义一个字符串数组 vector<string> words; //fox jumps over quick red slow the turtl…...
【atoi函数详解】
文章目录 一. 什么是atoi函数二. 模拟实现函数atoi三. 总结atoi 一. 什么是atoi函数 atoi函数是将常量字符串转化为整数 int atoi(const char str);* 注意:该函数的返回值为int,所以不能超过int范围,如果数字很大超过就会截断,返…...
字符串左旋 与 字符串旋转结果
字符串左旋 实现一个函数,可以左旋字符串中的k个字符。 例如: ABCD左旋一个字符得到BCDA ABCD左旋两个字符得到CDAB 方法1 三步翻转法 要求:abcdef 左旋两个 整体逆序:fedcba左边逆序:cdef ba右边逆序:cdef ab #include<stdio.h> #include<…...
真人现在猫鼠躲猫猫游戏搭建流程:专业思考与深度思考
真人现在猫鼠躲猫猫游戏是种充满乐趣和挑战的团队竞技游戏。本文将从游戏规则设计、场地布置、技术实现和用户体验等方面,深入探讨人现在猫鼠躲猫猫游戏的搭建流程,并结合专业思考与深度思考,为游戏搭建提供全面指导。 一、游戏规则设计&…...
计算机导论实验——Linux基础入门
使用Xshell登录 Linux 主机 linux命令: cd:去哪里 pwd:在哪里 ls:查看当前有什么文件 mkdir:创建新目录 cp:复制 cat:连接或显示文件 rm:删除 mv:用于移动或重命名文件…...
服务运营 |摘要:学术+业界-近期前沿运筹医疗合作精选
推文作者:李舒湉 编者按 本文归纳整理了近期INFORMS Journal on Applied Analytics中的相关业界合作研究。 这些研究成果体现了运筹学在医疗健康领域实践的效果。文中的学术业界合作使用了不同的研究工具。第一篇文章使用仿真模型帮助诊所进行不同拥挤程度下诊所使用…...
基于Dockerfile创建镜像
基于现有镜像创建 1.首先启动一个镜像,在容器里做修改 docker create -it centos:7 /bin/bash #常用选项: -m 说明信息; -a 作者信息; -p 生成过程中停止容器的运行。 2.然后将修改后的容器提交为新的镜像,需要使用…...
架构实战关键知识点
1.维基百科的“系统”定义:https://zh.wikipedia.org/wiki/%E7%B3%BB%E7%B5%B1 2.维基百科的“软件模块”定义:https://zh.wikipedia.org/wiki/%E8%BB%9F%E9%AB%9 4%E6%A8%A1%E7%B5%84 3.维基百科的“软件组件”定义:https://zh.wikipedia.or…...
M1Mac开启x86_64命令行archlinux虚拟机的最佳实践(qemu)
categories: [Tips] tags: Linux MacOS 写在前面 UTM 虚拟机可以卸载了, 命令行才是永远滴神, M1 MacBook Air 又能再战了! 之前一直用 UTM 的虚拟化开启 x86_64 的 Linux 虚拟机的, 但是我发现 UTM 好像不是必须的, 只要有qemu 就可以了, 下面就看看如何不通过图形界面前端…...
深度神经网络压缩与加速技术
// 深度神经网络是深度学习的一种框架,它是一种具备至少一个隐层的神经网络。与浅层神经网络类似,深度神经网络也能够为复杂非线性系统提供建模,但多出的层次为模型提供了更高的抽象层次,因而提高了模型的能力。深度神经网络是一…...
别再只会用pandas了!用openpyxl的load_workbook处理Excel,这些坑我帮你踩过了
别再只会用pandas了!用openpyxl的load_workbook处理Excel,这些坑我帮你踩过了 当Python开发者需要处理Excel文件时,pandas往往是首选工具——它简单、高效,能快速完成数据导入导出。但当你面对复杂格式的Excel文件,比…...
Unity VR开发选无线还是有线?Oculus Quest 2串流实战对比与效率工具推荐
Unity VR开发无线与有线串流深度对比:Oculus Quest 2高效开发全指南 当你沉浸在Unity VR开发的世界中,Oculus Quest 2无疑是目前最受欢迎的测试平台之一。但每次修改代码后漫长的打包安装过程,是否让你在无线自由与有线稳定之间反复纠结&…...
STM32 ADS1115接口文件(HAL库+硬件IIC)
STM32 ADS1115接口文件(HAL库硬件IIC) 【下载地址】STM32ADS1115接口文件HAL库硬件IIC 本资源包专为STM32系列微控制器设计,旨在简化通过HAL库利用硬件IIC接口与ADS1115高精度模拟到数字转换器(ADC)交互的过程。ADS1115是一款高性能的16位ΔΣ…...
深度解析Thorium浏览器:Chromium性能优化的终极实战指南
深度解析Thorium浏览器:Chromium性能优化的终极实战指南 【免费下载链接】thorium Chromium fork named after radioactive element No. 90. Source code and Linux releases. Windows/MacOS/ARM builds served in different repos, links are towards the top of t…...
【linux学习】linux的一些奇怪知识,方便日常使用
我是程序员小青蛙,下面介绍关于linux的知识。前言一些基本知识,方便利用,比如热键[tab],[ctrl]-c,[ctrl]-d,粘滞位,权限等;xshell中的复制粘贴,Ctrlinsert,复制shiftinsert->粘贴一、重要的几…...
自指系统在生命科学领域的机制与原理(世毫九实验室科普系列)
自指系统在生命科学领域的机制与原理(世毫九实验室科普系列) 作者:方见华 单位:世毫九实验室 1. 引言:自指系统的概念界定与研究意义 1.1 自指系统的定义与特征 自指系统(Self-referential Systems…...
终极指南:3分钟快速安装Windows官方包管理器Winget
终极指南:3分钟快速安装Windows官方包管理器Winget 【免费下载链接】winget-install Install WinGet using PowerShell! Prerequisites automatically installed. Works on Windows 10/11 and Server 2019/2022. 项目地址: https://gitcode.com/gh_mirrors/wi/win…...
Adafruit统一传感器驱动:嵌入式开发中的硬件抽象与数据标准化实践
1. 项目概述:为什么我们需要传感器数据标准化?在嵌入式开发领域,尤其是物联网和智能硬件项目中,传感器是连接物理世界与数字世界的桥梁。然而,但凡有过实际项目经验的开发者,都或多或少经历过这样的困扰&am…...
ChatGPT实时支付功能“不可见”的真相:不是没上线,而是被GDPR/SCA双重拦截——3分钟自查你的地区、浏览器、MFA配置是否全达标?
更多请点击: https://codechina.net 第一章:ChatGPT实时支付功能在哪里 ChatGPT 本身并不原生支持实时支付功能。OpenAI 官方发布的 ChatGPT(包括免费版、Plus 订阅版及 Team/Enterprise 版)定位为人工智能对话助手,其…...
4 款主流论文降 AI 软件实测对比!谁能 5 分钟把 AI 率降到 10% 以下
4 款主流论文降 AI 软件实测对比!谁能 5 分钟把 AI 率降到 10% 以下 毕业季最焦虑的事——答辩前剩 3 天、AI 率还有 70%、想找一款 5 分钟就能搞定的工具。 市面上很多工具宣称"几分钟出结果"——但实测下来快的快、慢的慢、效果差距更大。这篇文章实测对…...
