Pendant le processus de développement, j'ai rencontré la chaîne du groupe de données json et j'ai dû analyser le groupe json pour obtenir toutes les informations du groupe. Le format suivant :
[{"itemId":3101,"itemName":"空滤器及进气管道"},{"itemId":3102,"itemName":"水管、水泵"},{"itemId":3103,"itemName":"柴油管道"},{"itemId":3104,"itemName":"高压泵、机油泵"}]
En observant le groupe json, nous avons constaté qu'il s'agit d'une liste contenant plusieurs chaînes json. Ce que nous devons faire est de diviser toutes les chaînes json de la liste et de comparer chaque json. string Faites l’analyse.
Après analyse, il a été constaté que lorsque la chaîne JSON existe indépendamment, elle peut être extraite à l'aide de la méthode JSON_EXTRACT. Étant donné que la liste contient plusieurs chaînes JSON, nous devons la diviser en plusieurs chaînes JSON.
Avant d'étudier le contenu de cet article, vous devez au préalable comprendre deux fonctions de MySQL :
SUBSTRING_INDEX#🎜🎜 ##🎜🎜 #
JSON_EXTRACTÉtape 1 : Diviser une ligne en plusieurs lignes
1.1 Créez un nouveau keyid de table et insérez uniquement des nombres commençant à 0, comme suit :
#🎜🎜 #1.2 Trouvez l'identifiant de division Le soi-disant identifiant de division est un signe qui peut être divisé en plusieurs lignes à la fois en fonction de ce symbole. Dans la liste ci-dessous, l'identifiant de fractionnement est introuvable, il doit donc être traité. Considérez ; comme un identifiant divisé. Le contenu traité est le suivant :
{"itemId":3101,"itemName":"空滤器及进气管道"};{"itemId":3102,"itemName":"水管、水泵"};{"itemId":3103,"itemName":"柴油管道"};{"itemId":3104,"itemName":"高压泵、机油泵"}
select replace(replace(replace(jsonarr,"},{","};{"),"]",""),"[","") as jsonarr from maptest
À ce stade, nous pouvons utiliser l'opération JOIN pour fusionner la table maptest Connectez-vous à la table keyid nouvellement créée pour faire correspondre plusieurs lignes de données sous la condition ON. Divisé via SUBSTRING_INDEX.
Le code est le suivant :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 ) ;
Étape 2 : Analyser la chaîne json
Après avoir été divisée en plusieurs lignes, elle peut être analysée via JSON_EXTRACT. L'effet est le suivant :
Le code complété est le suivant :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 ) ;
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 ) ;
Remarque : Si le champ analysé par JSON_EXTRACT est une chaîne, il aura "" guillemets doubles, remplacez-les simplement par replace.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!