欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

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

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

引言

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

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

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

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

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

SUBSTRING_INDEX

JSON_EXTRACT

 具體用法,請(qǐng)自行百度,本文不做講解。

第一步:一行拆分成多行

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

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

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

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

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

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

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

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

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

1.3 通過(guò)join on拆分多行

這時(shí)候,就可以通過(guò) 將maptest表和 新建的 keyid表進(jìn)行join,用on條件,匹配成多行。在通過(guò) SUBSTRING_INDEX進(jìn)行拆分。

 代碼如下:

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字符串

拆分成多行之后,就可以通過(guò) JSON_EXTRACT 進(jìn)行解析了。效果如下:

完成代碼如下:

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)然通過(guò) 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 )
;

 注意: 通過(guò) JSON_EXTRACT 解析出來(lái)的字段,如果是字符串,會(huì)帶有 "" 雙引號(hào),只要replace替換掉即可。

總結(jié) 

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

相關(guān)文章

  • MySQL json相關(guān)函數(shù)及功能詳解

    MySQL json相關(guān)函數(shù)及功能詳解

    MySQL提供了一系列的JSON函數(shù),用于解析、提取、修改和操作JSON數(shù)據(jù),以下是一些常用的JSON函數(shù)及其功能,需要的朋友可以參考下
    2023-11-11
  • VMWare linux mysql 5.7.13安裝配置教程

    VMWare linux mysql 5.7.13安裝配置教程

    這篇文章主要為大家詳細(xì)介紹了VMWare linux mysql 5.7.13安裝配置教程,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2017-05-05
  • MySQL之MyISAM存儲(chǔ)引擎的非聚簇索引詳解

    MySQL之MyISAM存儲(chǔ)引擎的非聚簇索引詳解

    這篇文章主要為大家詳細(xì)介紹了MySQL之MyISAM存儲(chǔ)引擎的非聚簇索引,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下,希望能夠給你帶來(lái)幫助
    2022-03-03
  • mysql 月份查詢?cè)撛掠懈犊畹臄?shù)據(jù)

    mysql 月份查詢?cè)撛掠懈犊畹臄?shù)據(jù)

    mysql選擇月份查詢?cè)撛掠懈犊畹臄?shù)據(jù)(間隔x月并提前5天付款)
    2010-04-04
  • mysql5.7.17安裝使用圖文教程

    mysql5.7.17安裝使用圖文教程

    這篇文章主要為大家詳細(xì)介紹了MySql安裝與使用圖文教程,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2017-03-03
  • MySQL查看日志簡(jiǎn)單易懂保姆級(jí)教程

    MySQL查看日志簡(jiǎn)單易懂保姆級(jí)教程

    這篇文章主要給大家介紹了關(guān)于MySQL查看日志簡(jiǎn)單易懂保姆級(jí)教程的相關(guān)資料,在操作MySQL數(shù)據(jù)庫(kù)的時(shí)候會(huì)留下每一個(gè)步驟的痕跡,那怎么查看呢?就可以用日志去查看,需要的朋友可以參考下
    2023-08-08
  • 基于C++實(shí)現(xiàn)Mysql數(shù)據(jù)庫(kù)連接池實(shí)例

    基于C++實(shí)現(xiàn)Mysql數(shù)據(jù)庫(kù)連接池實(shí)例

    數(shù)據(jù)庫(kù)連接池負(fù)責(zé)分配、管理、和釋放數(shù)據(jù)庫(kù)連接,允許使用應(yīng)用程序重復(fù)使用一個(gè)現(xiàn)有的數(shù)據(jù)庫(kù)連接。數(shù)據(jù)庫(kù)連接是關(guān)鍵有限且昂貴的資源,一個(gè)數(shù)據(jù)庫(kù)連接對(duì)象均對(duì)應(yīng)一個(gè)物理數(shù)據(jù)庫(kù)的連接,每次操作都打開(kāi)一個(gè)物理連接,使用完都關(guān)閉連接
    2022-12-12
  • 如何利用MySQL查詢varbinary中存儲(chǔ)的數(shù)據(jù)

    如何利用MySQL查詢varbinary中存儲(chǔ)的數(shù)據(jù)

    varbinary 類型和char與varchar類型是相似的,他們是包含字節(jié)流而不是字符流,他們有二進(jìn)制字符的集合和順序,他們的對(duì)比,排序是基于字節(jié)的數(shù)值進(jìn)行的,本文給大家介紹如何利用MySQL查詢varbinary中存儲(chǔ)的數(shù)據(jù),感興趣的朋友一起看看吧
    2023-07-07
  • MYSQL中Truncate的用法詳解

    MYSQL中Truncate的用法詳解

    這篇文章主要介紹了MYSQL中Truncate的用法詳解,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2021-01-01
  • MySql分頁(yè)時(shí)使用limit+order by會(huì)出現(xiàn)數(shù)據(jù)重復(fù)問(wèn)題解決

    MySql分頁(yè)時(shí)使用limit+order by會(huì)出現(xiàn)數(shù)據(jù)重復(fù)問(wèn)題解決

    在MySQL中我們通常會(huì)采用limit來(lái)進(jìn)行翻頁(yè)查詢,當(dāng)limit遇到 order by的時(shí)候會(huì)出現(xiàn)數(shù)據(jù)重復(fù)問(wèn)題,本文就來(lái)記錄一下,感興趣的可以了解一下
    2021-08-08

最新評(píng)論