最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

mysql解析json數(shù)據(jù)組獲取數(shù)據(jù)組所有字段的方法實例

 更新時間:2022年08月22日 11:38:42   作者:xixiangdai  
mysql在5.7開始支持json解析了,也可以解析數(shù)組,下面這篇文章主要給大家介紹了關(guān)于mysql解析json數(shù)據(jù)組獲取數(shù)據(jù)組所有字段的相關(guān)資料,文中通過圖文以及實例代碼介紹的非常詳細(xì),需要的朋友可以參考下

引言

在開發(fā)過程中,遇到過json數(shù)據(jù)組的字符串,需要解析json組,得到組內(nèi)所有的信息。如下格式:

[{"itemId":3101,"itemName":"空濾器及進氣管道"},{"itemId":3102,"itemName":"水管、水泵"},{"itemId":3103,"itemName":"柴油管道"},{"itemId":3104,"itemName":"高壓泵、機油泵"}]

觀察json組發(fā)現(xiàn),它是一個list里面包含多個json字符串,我們要做的是拆分出list所有json字符串,并對每個json字符串做解析。

做分析發(fā)現(xiàn),如果是單獨一個json字符串,通過 JSON_EXTRACT 方法即可。但是list里面有多個json字符串,所以我們需要對list進行拆分,變成多個json字符串。

在學(xué)習(xí)本文內(nèi)容之前,需要提前了解mysql兩個函數(shù):

SUBSTRING_INDEX

JSON_EXTRACT

 具體用法,請自行百度,本文不做講解。

第一步:一行拆分成多行

一行拆成多行,即把list拆分成多行 json,為此我們需要

1.1 新建一張表keyid,只insert從0開始的數(shù)字,如下:

在其他的教程中,通過 mysql.help_topic 表的 help_topic_id 字段也是可以的。但是這個庫表需要root權(quán)限才可以使用。因此建立自己的匹配表,是最合適的。

注意:id的值,不能小于 list里面json字符串的個數(shù)。比如上述list里面的json字符串是4個,那id必須大于4。help_topic_id最大值是700,如果list里面json字符串的個數(shù)大于這個值,用help_topic_id是不合適的。

1.2 找到拆分標(biāo)識符

所謂拆分標(biāo)識符,就是能根據(jù)此符號,一次性拆分成多行的標(biāo)志。在下面list當(dāng)中,沒有找到拆分標(biāo)識符,因此需要處理一下??梢詫?; 當(dāng)成拆分標(biāo)識符。處理后的內(nèi)容如下:

{"itemId":3101,"itemName":"空濾器及進氣管道"};{"itemId":3102,"itemName":"水管、水泵"};{"itemId":3103,"itemName":"柴油管道"};{"itemId":3104,"itemName":"高壓泵、機油泵"}

 去除前后 [ 和 ] 兩個list標(biāo)志,將 },{ 變成 };{ 這樣就可以將 ; 變成拆分標(biāo)識符。如下

select replace(replace(replace(jsonarr,"},{","};{"),"]",""),"[","") as jsonarr from maptest

1.3 通過join on拆分多行

這時候,就可以通過 將maptest表和 新建的 keyid表進行join,用on條件,匹配成多行。在通過 SUBSTRING_INDEX進行拆分。

 代碼如下:

select 
a.jsonarr,
SUBSTRING_INDEX( SUBSTRING_INDEX( a.jsonarr, ";", b.id + 1 ), ";",- 1 ) AS jsonarr_info,
b.id
from 
(select replace(replace(replace(jsonarr,"},{","};{"),"]",""),"[","") as jsonarr from maptest) a
join keyid b 
on b.id< ( length( a.jsonarr ) - length( replace ( a.jsonarr, ";", "" ) ) + 1 )
;

到此,就完成了 將json組,拆分成多行的工作。

第二步:解析json字符串

拆分成多行之后,就可以通過 JSON_EXTRACT 進行解析了。效果如下:

完成代碼如下:

select 
a.jsonarr,
SUBSTRING_INDEX( SUBSTRING_INDEX( a.jsonarr, ";", b.id + 1 ), ";",- 1 ) AS jsonarr_info,
b.id,
JSON_EXTRACT(SUBSTRING_INDEX( SUBSTRING_INDEX( a.jsonarr, ";", b.id + 1 ), ";",- 1 ), '$[0].itemId') as itemId,
replace(JSON_EXTRACT(SUBSTRING_INDEX( SUBSTRING_INDEX( a.jsonarr, ";", b.id + 1 ), ";",- 1 ), '$[0].itemName'),'"','') as itemName
from 
(select replace(replace(replace(jsonarr,"},{","};{"),"]",""),"[","") as jsonarr from maptest) a
join keyid b 
on b.id< ( length( a.jsonarr ) - length( replace ( a.jsonarr, ";", "" ) ) + 1 )
;

當(dāng)然通過 mysql.help_topic 表的 help_topic_id 字段也是可以。代碼和結(jié)果如下:

select 
a.jsonarr,
SUBSTRING_INDEX( SUBSTRING_INDEX( a.jsonarr, ";", b.help_topic_id + 1 ), ";",- 1 ) AS jsonarr_info,
b.help_topic_id,
JSON_EXTRACT(SUBSTRING_INDEX( SUBSTRING_INDEX( a.jsonarr, ";", b.help_topic_id + 1 ), ";",- 1 ), '$[0].itemId') as itemId,
replace(JSON_EXTRACT(SUBSTRING_INDEX( SUBSTRING_INDEX( a.jsonarr, ";", b.help_topic_id + 1 ), ";",- 1 ), '$[0].itemName'),'"','') as itemName
from 
(select replace(replace(replace(jsonarr,"},{","};{"),"]",""),"[","") as jsonarr from maptest) a
join mysql.help_topic b 
on b.help_topic_id < ( length( a.jsonarr ) - length( replace ( a.jsonarr, ";", "" ) ) + 1 )
;

 注意: 通過 JSON_EXTRACT 解析出來的字段,如果是字符串,會帶有 "" 雙引號,只要replace替換掉即可。

總結(jié) 

到此這篇關(guān)于mysql解析json數(shù)據(jù)組獲取數(shù)據(jù)組所有字段的文章就介紹到這了,更多相關(guān)mysql解析json數(shù)據(jù)組內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • mysql主鍵,外鍵,非空,唯一,默認(rèn)約束及創(chuàng)建表的方法

    mysql主鍵,外鍵,非空,唯一,默認(rèn)約束及創(chuàng)建表的方法

    這篇文章主要介紹了mysql主鍵,外鍵,非空,唯一,默認(rèn)約束及創(chuàng)建表的方法,在數(shù)據(jù)庫中,數(shù)據(jù)表是數(shù)據(jù)庫中最重要、最基本的操作對象,是數(shù)據(jù)存儲的基本單位
    2022-07-07
  • MySQL 關(guān)閉子表的外鍵約束檢察方法

    MySQL 關(guān)閉子表的外鍵約束檢察方法

    下面小編就為大家?guī)硪黄狹ySQL 關(guān)閉子表的外鍵約束檢察方法。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-03-03
  • mysql獲取隨機數(shù)據(jù)的方法

    mysql獲取隨機數(shù)據(jù)的方法

    在mysql中獲取隨機數(shù)據(jù)方法很簡單只要使用order by rand()即可了,但是如果你是百萬級數(shù)據(jù)量,使用order by rand()獲取隨機數(shù)據(jù)你會等死去,下面我來介紹具體的解決辦法
    2013-11-11
  • Windows免安裝MySQL?8.0.28?版本圖文教程

    Windows免安裝MySQL?8.0.28?版本圖文教程

    這篇文章主要為大家詳細(xì)介紹了Windows免安裝MySQL8.0.28版本圖文教程,文中安裝步驟介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2022-04-04
  • MySQL優(yōu)化之InnoDB優(yōu)化

    MySQL優(yōu)化之InnoDB優(yōu)化

    InnoDB是為Mysql處理巨大數(shù)據(jù)量時的最大性能設(shè)計。它的CPU效率可能是任何其它基于磁盤的關(guān)系數(shù)據(jù)庫引擎所不能匹敵的。在數(shù)據(jù)量大的網(wǎng)站或是應(yīng)用中Innodb是倍受青睞的。那么它就不需要優(yōu)化了嗎,答案很顯然:當(dāng)然不是?。?!
    2017-03-03
  • 30種SQL語句優(yōu)化的方法匯總

    30種SQL語句優(yōu)化的方法匯總

    這篇文章從30個方面,分享了sql優(yōu)化的一些小技巧,希望對你有所幫助,需要的朋友可以參考下
    2022-10-10
  • MySQL數(shù)據(jù)庫防止人為誤操作的實例講解

    MySQL數(shù)據(jù)庫防止人為誤操作的實例講解

    這篇文章主要介紹了MySQL數(shù)據(jù)庫防止人為誤操作的方法,需要的朋友可以參考下
    2014-06-06
  • 通過SQL語句來備份,還原數(shù)據(jù)庫

    通過SQL語句來備份,還原數(shù)據(jù)庫

    這里僅僅用到了一種方式而已,把數(shù)據(jù)庫文件備份到磁盤然后在恢復(fù).
    2010-02-02
  • 關(guān)于Mysql8.0版本驅(qū)動getTables返回所有庫的表問題淺析

    關(guān)于Mysql8.0版本驅(qū)動getTables返回所有庫的表問題淺析

    這篇文章主要給大家介紹了關(guān)于Mysql 8.0版本驅(qū)動getTables返回所有庫的表問題的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2018-12-12
  • MySQL UPDATE更新語句精解

    MySQL UPDATE更新語句精解

    mysql update命令的一些詳細(xì)用法分析,真是不錯的好東西,建議大家看看。
    2009-03-03

最新評論

黄冈市| 灵璧县| 喜德县| 邓州市| 简阳市| 汉阴县| 太康县| 朔州市| 汶川县| 都江堰市| 武冈市| 乌审旗| 九江市| 泌阳县| 清远市| 郯城县| 丰台区| 包头市| 专栏| 红桥区| 南和县| 遂昌县| 仪征市| 桂东县| 香格里拉县| 成安县| 子洲县| 衡水市| 大理市| 竹溪县| 广宁县| 理塘县| 合肥市| 普洱| 阿克| 耿马| 凤山县| 水富县| 莱州市| 莱西市| 敦煌市|