Heim  >  Artikel  >  Datenbank  >  So erhalten Sie alle Felder der Datengruppe, wenn MySQL die JSON-Datengruppe analysiert

So erhalten Sie alle Felder der Datengruppe, wenn MySQL die JSON-Datengruppe analysiert

王林
王林nach vorne
2023-05-29 20:01:461705Durchsuche

    Einführung

    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

    Schritt 1: Teilen Sie eine Zeile in mehrere Zeilen auf

    Teilen Sie eine Zeile in mehrere Zeilen, das heißt, die Liste ist in mehrere JSON-Zeilen aufgeteilt. Dazu benötigen wir

    1.1, um eine neue Tabellen-KeyID zu erstellen und nur Zahlen ab 0 einzufügen, wie folgt:

    So erhalten Sie alle Felder der Datengruppe, wenn MySQL die JSON-Datengruppe analysiert

    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.

    1.2 Finden Sie die geteilte Kennung

    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

    So erhalten Sie alle Felder der Datengruppe, wenn MySQL die JSON-Datengruppe analysiert

    1.3 Mehrere Zeilen durch Join aufteilen

    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.

    So erhalten Sie alle Felder der Datengruppe, wenn MySQL die JSON-Datengruppe analysiert

    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.

    Schritt 2: Analysieren Sie die JSON-Zeichenfolge

    Nach der Aufteilung in mehrere Zeilen kann sie über JSON_EXTRACT analysiert werden. Der Effekt ist wie folgt:

    So erhalten Sie alle Felder der Datengruppe, wenn MySQL die JSON-Datengruppe analysiert

    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:

    So erhalten Sie alle Felder der Datengruppe, wenn MySQL die JSON-Datengruppe analysiert

    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!

    Stellungnahme:
    Dieser Artikel ist reproduziert unter:yisu.com. Bei Verstößen wenden Sie sich bitte an admin@php.cn löschen