iis服务器助手广告广告
返回顶部
首页 > 资讯 > 数据库 >怎么使用mysql5.6解析JSON字符串
  • 549
分享到

怎么使用mysql5.6解析JSON字符串

2023-07-02 15:07:33 549人浏览 八月长安
摘要

本篇内容主要讲解“怎么使用mysql5.6解析JSON字符串”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“怎么使用Mysql5.6解析jsON字符串”吧!mysql5.6 解析JSON字符串支持

本篇内容主要讲解“怎么使用mysql5.6解析JSON字符串”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“怎么使用Mysql5.6解析jsON字符串”吧!

mysql5.6 解析JSON字符串

支持复杂的嵌套格式

废话不多说,先上代码。

CREATE FUNCTioN `json_parse`(`jsondata` longtext,`keyname` text) RETURNS text CHARSET utf8BEGINDECLARE delim VARCHAR(128);DECLAREresult longtext;DECLARE startpos INTEGER;DECLARE endpos INTEGER;DECLARE endpos1 INTEGER;  DECLARE findpos INTEGER;DECLARE leftbrace INTEGER;DECLARE tmp longtext;  DECLARE tmp2 longtext;DECLARE Flag INTEGER; SET delim = CONCAT('"', keyname, '": "');SET startpos = locate(delim,jsondata); IF startpos > 0 THENSET findpos = startpos+length(delim);SET leftbrace = 1;SET endpos = 0;SET Flag =1;get_token_loop: repeat IF substr(jsondata,findpos,2)='\\"' THENSET findpos = findpos + 2;iterate get_token_loop;ELSEIF substr(jsondata,findpos,2)='\\\\' THENSET findpos = findpos + 2;iterate get_token_loop;ELSEIF substr(jsondata,findpos,1)='"' AND Flag = 1  THEN SET endpos = findpos;SET findpos = LENGTH(jsondata)+1;leave get_token_loop;END IF;SET findpos = findpos + 1;UNTIL findpos > LENGTH(jsondata) END repeat;IF endpos > 0 THENSELECT substr(jsondata,startpos+length(delim)#取出value值的起始位置,endpos#取出value值的结束位置-(startpos+length(delim))#减去value值的起始位置,得到value值字符长度) INTO resultFROM DUAL;SET result= replace(result,'\\"','"');SET result= replace(result,'\\\\','\\');ELSE SET result=null;END IF;ELSESET delim = CONCAT('"', keyname, '": {');SET startpos = locate(delim,jsondata);IF startpos > 0 THENSET findpos = startpos+length(delim);SET leftbrace = 0;SET endpos = 0;SET Flag =0;get_token_loop: repeat IF substr(jsondata,findpos,2)='{"' THENSET leftbrace = leftbrace + 1;SET findpos = findpos + 2;iterate get_token_loop;ELSEIF substr(jsondata,findpos,2)='\\"' THENSET findpos = findpos + 2;iterate get_token_loop;ELSEIF substr(jsondata,findpos,3)=': "' THENSET Flag = 1;SET findpos = findpos + 3;iterate get_token_loop;ELSEIF substr(jsondata,findpos,1)='"' THENSET Flag = 0;ELSEIF substr(jsondata,findpos,1)='}' AND Flag = 0  THENIF leftbrace > 0 THENSET leftbrace = leftbrace - 1;ELSE SET endpos = findpos;SET findpos = LENGTH(jsondata)+1;END IF;END IF;SET findpos = findpos + 1;UNTIL findpos > LENGTH(jsondata) END repeat;IF endpos > 0 THENSELECT substr(jsondata,startpos+length(delim)#取出value值的起始位置,endpos#取出value值的结束位置-(startpos+length(delim))#减去value值的起始位置,得到value值字符长度) INTO resultFROM DUAL;SET result=CONCAT("{",result, '}');ELSE SET result=null;END IF;ELSE SET delim = CONCAT('"', keyname, '": [');SET startpos = locate(delim,jsondata);IF startpos > 0 THENSET findpos = startpos+length(delim);SET leftbrace = 0;SET endpos = 0; SET tmp = substring_index(jsondata,delim,-1);SET tmp2 = substring_index(tmp,']',1);   IF locate('[',tmp2) =0 THENSET endpos = locate(']',tmp);SET endpos = endpos+findpos-1; ELSEget_token_loop: repeat IF substr(jsondata,findpos,2)='\\"' THENSET findpos = findpos + 2;iterate get_token_loop;ELSEIF substr(jsondata,findpos,3)=': "' THENSET Flag = 1;SET findpos = findpos + 3;iterate get_token_loop;ELSEIF substr(jsondata,findpos,1)='[' AND Flag = 0 THENSET leftbrace = leftbrace + 1;SET findpos = findpos + 1;iterate get_token_loop;ELSEIF substr(jsondata,findpos,1)='"' THENSET Flag = 0;ELSEIF substr(jsondata,findpos,1)=']' AND Flag = 0  THENIF leftbrace > 0 THENSET leftbrace = leftbrace - 1;ELSE SET endpos = findpos;SET findpos = LENGTH(jsondata)+1;END IF;END IF;SET findpos = findpos + 1;UNTIL findpos > LENGTH(jsondata) END repeat;END IF;IF endpos > 0 THENSELECT substr(jsondata,startpos+length(delim)#取出value值的起始位置,endpos#取出value值的结束位置-(locate(delim,jsondata)+length(delim))#减去value值的起始位置,得到value值字符长度) INTO resultFROM DUAL;SET result=CONCAT("[",result, ']');ELSE SET result=null;END IF;ELSE SET delim = CONCAT('"', keyname, '": ');SET startpos = locate(delim,jsondata);IF startpos > 0 THENSET endpos = locate(',',jsondata,startpos+length(delim));SET endpos1 = locate('}',jsondata,startpos+length(delim));IF endpos>0 OR endpos1>0 THENIF endpos1>0 AND endpos1 < endpos OR endpos =0 THENSET endpos = endpos1;END IF;SELECT substr(jsondata,startpos+length(delim)#取出value值的起始位置,endpos#取出value值的结束位置-(locate(delim,jsondata)+length(delim))#减去value值的起始位置,得到value值字符长度) INTO resultFROM DUAL;IF STRCMP(result,'null')=0 THENSET result=null;END IF;ELSE SET result=null;END IF;ELSE SET result=null;END IF;END IF;END IF;END IF;if result='' and RIGHT(keyname,2)='Id' thenSET result=null;end if;RETURN result;END

jsondata需要严格的json格式(注意逗号和分号以及双引号之间的空格)

SET jsondata='{"CurrentPage": 1, "data": [{"config": "123"}, {"config": "456"}], "PageSize": 10}' SELECT json_parse(jsondata, 'CurrentPage') INTO CurrentPage;SELECT json_parse(jsondata, 'data') INTO data;

这边如果想获取config的内容,可以这样处理

        SET count = (LENGTH(data)-LENGTH(REPLACE(data,'},','')))/2+1;        SET i = 0;        WHILE i < count DO            SET SetObject = SUBSTRING_INDEX(SUBSTRING_INDEX(data,'},',i+1),'},',-1);            IF LENGTH(SetObject)>0 THEN                SELECT json_parse(SetObject, 'config') INTO config;                END IF;            SET i = i + 1;        END WHILE;

不足之处,jsondata数据多的情况下,会有效率问题。

mysql5.6及以下解析json方法

之前在公司发现在线的查询平台是MySQL5.6,不能用JSON_EXTRACT,也不能用存储过程,所以只能自己编了一个简单的小查询,几条数据还是能查的,如果数据量大的话,估计耗的资源就会比较多。

先说一下问题的背景

是想在'{"platfORM":"Android","source":"tt","details":null}'这一串东西里面找到source这个key对应的value值。

这个方法是先找到source":"这个字符串的起始位置和长度,这样就能够找到value值的起始位置;再找到这个字符串以后第一个"出现的位置,就能得到value值的结束位置。

再利用substr函数,就可以取出对应的位置。

下面是对应的代码 

SELECT '{"platform":"Android","source":"tt","details":null}' as 'sample',substr(  '{"platform":"Android","source":"tt","details":null}'  ,locate('source":"','{"platform":"Android","source":"tt","details":null}')   +length('source":"')#取出value值的起始位置  ,locate(  '"'  ,'{"platform":"Android","source":"tt","details":null}'  ,locate('source":"','{"platform":"Android","source":"tt","details":null}')  +length('source":"')  )#取出value值的结束位置  -(  locate('source":"','{"platform":"Android","source":"tt","details":null}')  +length('source":"')  )#减去value值的起始位置,得到value值字符长度  ) as resultFROM DUAL

运行以后,就得到result的结果,就是tt。如果需要其他元素,就替换一下对应的key值和字段,就好了。

到此,相信大家对“怎么使用mysql5.6解析JSON字符串”有了更深的了解,不妨来实际操作一番吧!这里是编程网网站,更多相关内容可以进入相关频道进行查询,关注我们,继续学习!

您可能感兴趣的文档:

--结束END--

本文标题: 怎么使用mysql5.6解析JSON字符串

本文链接: https://www.lsjlt.com/news/342750.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

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

下载Word文档
猜你喜欢
  • 怎么使用mysql5.6解析JSON字符串
    本篇内容主要讲解“怎么使用mysql5.6解析JSON字符串”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“怎么使用mysql5.6解析JSON字符串”吧!mysql5.6 解析JSON字符串支持...
    99+
    2023-07-02
  • oracle怎么解析json字符串
    本篇内容介绍了“oracle怎么解析json字符串”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!DECLA...
    99+
    2024-04-02
  • fastjson怎么解析json字符串
    可以使用Fastjson提供的JSON.parseObject()方法来解析JSON字符串。该方法接受两个参数,第一个参数是要解析的...
    99+
    2023-09-22
    fastjson json
  • mysql 解析json字符串、数组字符串、json数组字符串
    背景: 笔者使用mysql 5.7进行了一次json字符串的解析,因为一直在搞大数据相关的数据库、olap等,太久没有用mysql5.x的版本,一些函数已经不知道支不支持,我的同事建议我使用like、rlike模糊匹配的方式,身为数据人我不...
    99+
    2023-08-17
    mysql json 数据库
  • Linux下怎么解析JSON字符串
    这篇文章主要为大家展示了“Linux下怎么解析JSON字符串”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“Linux下怎么解析JSON字符串”这篇文章吧。1、JSON命令: $&nbs...
    99+
    2023-06-28
  • mysql5.6解析JSON字符串方式(支持复杂的嵌套格式)
    目录mysql5.6 解析JSON字符串支持复杂的嵌套格式mysql5.6及以下解析json方法先说一下问题的背景下面是对应的代码 mysql5.6 解析JSON字符串 支...
    99+
    2024-04-02
  • 使用Jackson-json解析一个嵌套的json字符串
    目录Jackson-json解析一个嵌套的json字符串关于这个jar包然后读入我的json字符串(str)把节点展开取到shops时就简单了,贴上代码java解析多层嵌套json字...
    99+
    2024-04-02
  • Scala如何解析Json字符串
    小编给大家分享一下Scala如何解析Json字符串,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!Scala解析Json字符串的实...
    99+
    2024-04-02
  • jquery如何解析json字符串
    在jquery中解析json字符串的方法:1.新建html项目,引入jquery;2.定义json字符串;3.使用parseJSON、JSON.parse、eval函数解析json字符串;具体步骤如下:首先,在新建一个html项目,在项目中...
    99+
    2024-04-02
  • mysql如何解析json字符串
    mysql中解析json字符串的方法使用JSON_EXTRACT()函数解析json字符串 语法:JSON_EXTRACT(原字段,'$.json字段名')示例:SELECT JSON_EXTRACT( t.result,'$.ro...
    99+
    2024-04-02
  • Go语言怎么利用Unmarshal解析json字符串
    这篇文章主要介绍“Go语言怎么利用Unmarshal解析json字符串”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“Go语言怎么利用Unmarshal解析json字符串”文章能帮助大家解决问题。简单...
    99+
    2023-06-30
  • 使用json解析字符串要注意哪些事项
    在使用JSON解析字符串时,需要注意以下几个事项:1. 确保字符串是一个有效的JSON格式:JSON解析器只能处理符合JSON语法规...
    99+
    2023-09-12
    json
  • java json字符串怎么转json对象
    可以使用Java的JSON库来将JSON字符串转换为JSON对象。常用的JSON库有GSON、Jackson、Fastjson等。以...
    99+
    2023-09-27
    java json
  • 使用golang中的json.Unmarshal函数将JSON字符串解析为map
    使用golang中的json.Unmarshal函数将JSON字符串解析为map在golang中,我们可以使用json.Unmarshal函数将JSON字符串解析为map。json.Unmarshal是一个将JSON数据解码为go值的函数,...
    99+
    2023-11-18
    Golang JSON unmarshal
  • 解析 JSON:文件和字符串的读取
    各位小伙伴们,大家好呀!看看今天我又给各位带来了什么文章?本文标题是《解析 JSON:文件和字符串的读取》,很明显是关于Golang的文章哈哈哈,其中内容主要会涉及到等等,如果能帮到你,觉得很不错的...
    99+
    2024-04-04
  • javascript怎么转为json字符串
    小编给大家分享一下javascript怎么转为json字符串,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!javascript转为json字符串的方法:1、使用“...
    99+
    2023-06-14
  • JS中Json字符串+Cookie+localstorage怎么用
    这篇文章给大家分享的是有关JS中Json字符串+Cookie+localstorage怎么用的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。1.Json字符串Json主要用于前后端交互,是一种数据格式,相较于Xml...
    99+
    2023-06-21
  • json字符串乱序问题怎么解决
    解决 JSON 字符串乱序问题的方法主要有两种: 使用 JSON.stringify() 方法和自定义排序函数对 JSON 对象进...
    99+
    2024-03-01
    json
  • Go语言利用Unmarshal解析json字符串的实现
    简单的解析例子: 首先还是从官方文档中的例子: package main import (     "fmt"     "encoding/json" ) type Animal...
    99+
    2024-04-02
  • java解析多层嵌套json字符串问题
    目录java分别解析下面两个json字符串嵌套(任意层)JSON解析转换为Map源代码java分别解析下面两个json字符串 package jansonDemo; import...
    99+
    2024-04-02
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作