MariaDB
 sql >> Datenbank >  >> RDS >> MariaDB

MariaDB JSON_EXTRACT() erklärt

In MariaDB JSON_EXTRACT() ist eine integrierte Funktion, die Daten aus einem JSON-Dokument basierend auf einem oder mehreren angegebenen Pfaden extrahiert.

Es kann einzelne Werte und mehrere Werte zurückgeben. Wenn ein einzelner Wert übereinstimmt, wird ein einzelner Wert zurückgegeben. Wenn mehrere Werte übereinstimmen, werden diese Werte in einem Array zurückgegeben.

Syntax

Die Syntax lautet wie folgt:

JSON_EXTRACT(json_doc, path[, path] ...) 

Wobei json_doc ist das JSON-Dokument und jeder path Argument ist ein Pfad innerhalb des Dokuments.

Beispiel

Hier ist ein Beispiel zur Veranschaulichung.

SET @json_document = '
    { 
        "name": "Wag", 
        "type": "Dog", 
        "weight": 20 
    }
';
SELECT JSON_EXTRACT(@json_document, '$.name'); 

Ergebnis:

+----------------------------------------+| JSON_EXTRACT(@json_document, '$.name') |+------------------------------------- ---+| "Wag" |+----------------------------------------+

Mehrere Pfade

Hier ist ein Beispiel für die Angabe mehrerer Pfade, um mehrere Werte aus dem JSON-Dokument zurückzugeben.

Wenn Sie mehrere Werte zurückgeben, werden sie in einem Array zurückgegeben.

SET @json_document = '
    { 
        "name": "Wag", 
        "type": "Dog", 
        "weight": 20 
    }
';
SELECT JSON_EXTRACT(@json_document, '$.name', '$.weight'); 

Ergebnis:

+---------------------------------------------- ------+| JSON_EXTRACT(@json_document, '$.name', '$.weight') |+------------------------------- ---------------------+| ["Wackeln", 20] |+-------------------------------------------------- -----------+

Nicht vorhandene Pfade

Das Übergeben eines Pfads, der im JSON-Dokument nicht vorhanden ist, führt zu NULL .

Beispiel:

SET @json_document = '
    { 
        "name": "Wag", 
        "type": "Dog", 
        "weight": 20 
    }
';
SELECT JSON_EXTRACT(@json_document, '$.color'); 

Ergebnis:

+------------------------------------+| JSON_EXTRACT(@json_document, '$.color') |+------------------------------------- ----+| NULL |+------------------------------------+

Wenn jedoch mehrere Pfade übergeben werden und mindestens einer davon übereinstimmt, wird der übereinstimmende Wert extrahiert und in einem Array zurückgegeben. Dies gilt auch dann, wenn nur ein Wert extrahiert wird.

Beispiel:

SET @json_document = '
    { 
        "name": "Wag", 
        "type": "Dog", 
        "weight": 20 
    }
';
SELECT JSON_EXTRACT(@json_document, '$.name', '$.color'); 

Ergebnis:

+---------------------------------------------- -----+| JSON_EXTRACT(@json_document, '$.name', '$.color') |+------------------------------- --------------------+| ["Wag"] |+-------------------------------------------------- --------+

Arrays

Hier ist ein Beispiel für das Extrahieren von Daten aus einem Array:

SET @json_document = '
    { 
        "_id" : 1, 
        "awards" : [ "Top Dog", "Best Dog", "Biggest Dog" ] 
    }
';
SELECT JSON_EXTRACT(@json_document, '$.awards[0]'); 

Ergebnis:

+---------------------------------------------+ | JSON_EXTRACT(@json_document, '$.awards[0]') |+---------------------------------------------- -----------+| "Platzhirsch" |+-------------------------------------------------------- -+

Arrays sind nullbasiert, also $.awards[0] extrahiert das erste Element der awards Array.

Verschachtelte Objekte

Hier ist ein Beispiel für das Extrahieren von Daten aus einem Objekt, das in einem anderen Objekt verschachtelt ist:

SET @json_document = '
    { 
        "_id" : 1, 
        "name" : "Wag", 
        "details" : {
            "type" : "Dog", 
            "weight" : 20,
            "awards" : { 
                "Florida Dog Awards" : "Top Dog", 
                "New York Marathon" : "Fastest Dog", 
                "Sumo 2020" : "Biggest Dog"
            }
        }
    }
';
SELECT JSON_EXTRACT(
    @json_document, 
    '$.details.awards.New York Marathon'
    ) AS Result; 

Ergebnis:

+---------------+| Ergebnis |+---------------+| "Schnellster Hund" |+---------------+

Wenn wir jedoch alle Auszeichnungen extrahieren wollten, könnten wir den Pfad zu $.details.awards verkürzen :

SET @json_document = '
    { 
        "_id" : 1, 
        "name" : "Wag", 
        "details" : {
            "type" : "Dog", 
            "weight" : 20,
            "awards" : { 
                "Florida Dog Awards" : "Top Dog", 
                "New York Marathon" : "Fastest Dog", 
                "Sumo 2020" : "Biggest Dog"
            }
        }
    }
';
SELECT JSON_EXTRACT(
    @json_document, 
    '$.details.awards'
    ) AS Result; 

Ergebnis:

+---------------------------------------------- -------------------------------------------------- ---+| Ergebnis |+------------------------------------------------------------ -------------------------------------------------- --+| {"Florida Dog Awards":"Platzhirsch", "New York Marathon":"Schnellster Hund", "Sumo 2020":"Größter Hund"} |+--------------- -------------------------------------------------- ---------------------------------+

Das Ergebnis verschönern

Wir können das Ergebnis leichter lesbar machen, indem wir JSON_EXTRACT() übergeben zu JSON_DETAILED() Funktion:

SET @json_document = '
    { 
        "_id" : 1, 
        "name" : "Wag", 
        "details" : {
            "type" : "Dog", 
            "weight" : 20,
            "awards" : { 
                "Florida Dog Awards" : "Top Dog", 
                "New York Marathon" : "Fastest Dog", 
                "Sumo 2020" : "Biggest Dog"
            }
        }
    }
';
SELECT 
    JSON_DETAILED(
        JSON_EXTRACT(
            @json_document, 
            '$.details.awards'
            ) 
    ) AS Result; 

Ergebnis:

+---------------------------------------------- --+| Ergebnis |+------------------------------------------------------------ -+| { "Florida Dog Awards":"Platzhirsch", "New York Marathon":"Schnellster Hund", "Sumo 2020":"Größter Hund"} |+--------------- ---------------------------------+

Null-Argumente

Wenn irgendein Argument NULL ist , ist das Ergebnis NULL :

SELECT 
    JSON_EXTRACT(null, '$.type'),
    JSON_EXTRACT('{"a":1}', null); 

Ergebnis:

+------------------------------+--------------- ----------------+| JSON_EXTRACT(null, '$.type') | JSON_EXTRACT('{"a":1}', null) |+------------------------------+--- ----------------------------+| NULL | NULL |+------------------------------+---------------- ---------------+

Falsche Parameteranzahl

Wenn Sie keine Argumente angeben, wird ein Fehler ausgegeben:

SELECT JSON_EXTRACT(); 

Ergebnis:

FEHLER 1582 (42000):Falsche Parameteranzahl im Aufruf der nativen Funktion „JSON_EXTRACT“

Das Gleiche gilt, wenn Sie zu wenige oder zu viele Argumente angeben:

SELECT JSON_EXTRACT('{ "a": 1}'); 

Ergebnis:

FEHLER 1582 (42000):Falsche Parameteranzahl im Aufruf der nativen Funktion „JSON_EXTRACT“