Während des Entwicklungsprozesses bin ich auf die Zeichenfolge der JSON-Datengruppe gestoßen und musste die JSON-Gruppe analysieren, um alle Informationen in der Gruppe zu erhalten. Das folgende Format:
[{"itemId":3101,"itemName":"空滤器及进气管道"},{"itemId":3102,"itemName":"水管、水泵"},{"itemId":3103,"itemName":"柴油管道"},{"itemId":3104,"itemName":"高压泵、机油泵"}]
Bei der Beobachtung der JSON-Gruppe haben wir festgestellt, dass es sich um eine Liste mit mehreren JSON-Strings handelt. Wir müssen alle JSON-Strings in der Liste aufteilen und jeden JSON-String analysieren.
Nach der Analyse wurde festgestellt, dass die JSON-Zeichenfolge, wenn sie unabhängig existiert, mit der JSON_EXTRACT-Methode extrahiert werden kann. Da die Liste mehrere JSON-Strings enthält, müssen wir die Liste in mehrere JSON-Strings aufteilen.
Bevor Sie den Inhalt dieses Artikels studieren, müssen Sie im Voraus zwei Funktionen von MySQL verstehen:
SUBSTRING_INDEX
JSON_EXTRACT
Teilen Sie eine Zeile in mehrere Zeilen, das heißt, die Liste ist in mehrere JSON-Zeilen aufgeteilt. Dazu benötigen wir
In anderen Tutorials bis das Feld help_topic_id der Tabelle mysql.help_topic. Es ist auch möglich. Diese Bibliothekstabelle erfordert jedoch Root-Berechtigungen, bevor sie verwendet werden kann. Daher ist es am besten, eine eigene passende Tabelle zu erstellen.
Hinweis: Der Wert von id darf nicht kleiner sein als die Anzahl der JSON-Strings in der Liste. Wenn die obige Liste beispielsweise 4 JSON-Zeichenfolgen enthält, muss der ID-Wert größer als 4 sein. Der Maximalwert von help_topic_id beträgt 700. Wenn die Anzahl der JSON-Strings in der Liste diesen Wert überschreitet, ist die Verwendung von help_topic_id ungeeignet.
Die sogenannte geteilte Kennung ist ein Zeichen, das anhand dieses Symbols in mehrere Zeilen gleichzeitig geteilt werden kann. In der folgenden Liste wurde die Split-ID nicht gefunden und muss daher verarbeitet werden. Sie können sich ; als geteilte Kennung vorstellen. Der verarbeitete Inhalt ist wie folgt:
{"itemId":3101,"itemName":"空滤器及进气管道"};{"itemId":3102,"itemName":"水管、水泵"};{"itemId":3103,"itemName":"柴油管道"};{"itemId":3104,"itemName":"高压泵、机油泵"}
Entfernen Sie die beiden Listenzeichen [ und ] davor und danach und ändern Sie },{ in };{, damit ; in einen geteilten Bezeichner umgewandelt werden kann. Wie folgt
select replace(replace(replace(jsonarr,"},{","};{"),"]",""),"[","") as jsonarr from maptest
Zu diesem Zeitpunkt können wir die Maptest-Tabelle und die neu erstellte Keyid-Tabelle verbinden, indem wir die JOIN-Operation verwenden, um mehrere Datenzeilen unter der ON-Bedingung abzugleichen. Aufteilung über SUBSTRING_INDEX.
Der Code lautet wie folgt:
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 ) ;
An diesem Punkt ist die Aufteilung der JSON-Gruppe in mehrere Zeilen abgeschlossen.
Nach der Aufteilung in mehrere Zeilen kann sie über JSON_EXTRACT analysiert werden. Der Effekt ist wie folgt:
Der fertige Code lautet wie folgt:
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 ) ;
Natürlich ist es auch möglich, das Feld help_topic_id der Tabelle mysql.help_topic zu verwenden. Der Code und die Ergebnisse lauten wie folgt:
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 ) ;
Hinweis: Wenn das von JSON_EXTRACT analysierte Feld eine Zeichenfolge ist, enthält es doppelte Anführungszeichen. Ersetzen Sie es einfach.
Das obige ist der detaillierte Inhalt vonSo erhalten Sie alle Felder der Datengruppe, wenn MySQL die JSON-Datengruppe analysiert. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!