sql >> Databáze >  >> RDS >> MariaDB

MariaDB JSON_QUERY() vysvětleno

V MariaDB, JSON_QUERY() je vestavěná funkce, která vrací objekt nebo pole z dokumentu JSON na základě poskytnuté cesty.

Je to podobné jako JSON_VALUE() funkce, kromě toho, že vrací objekt nebo pole namísto skalárního (JSON_VALUE() vrátí skalár).

Syntaxe

Syntaxe vypadá takto:

JSON_QUERY(json_doc, path) 

Kde json_doc je dokument JSON a path je cesta v dokumentu.

Příklad

Zde je příklad k demonstraci.

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_QUERY(@json_document, '$.details'); 

Výsledek:

{ "type" :"Pes", "váha" :20, "ocenění" :{ "Florida Dog Awards" :"Top Dog", "New York Marathon" :"Nejrychlejší pes", "Sumo 2020" :"Největší pes" }}

Můžeme použít tečkovou notaci k přechodu dolů k dalšímu vnořenému objektu:

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_QUERY(@json_document, '$.details.awards'); 

Výsledek:

{ "Florida Dog Awards" :"Top Dog", "New York Marathon" :"Nejrychlejší pes", "Sumo 2020" :"Největší pes"}

Pole

Zde je příklad vrácení pole:

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

Výsledek:

+------------------------------------------+| JSON_QUERY(@json_document, '$.awards') |+------------------------------------- -----+| [ "Top pes", "Nejlepší pes", "Největší pes" ] |+-------------------------------- ----------+

Pokud chcete vrátit skutečný prvek pole, vyzkoušejte JSON_VALUE() funkce.

Neexistující cesta

Předání cesty, která v dokumentu JSON neexistuje, má za následek NULL .

Příklad:

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

Výsledek:

+--------------------------------------+| JSON_QUERY(@json_document, '$.type') |+------------------------------------- -+| NULL |+--------------------------------------+

Skalární hodnoty

Pokus o vrácení skalární hodnoty vrátí NULL .

Příklad:

SELECT JSON_QUERY('{ "weight": 10 }', '$.weight'); 

Výsledek:

+--------------------------------------------+| JSON_QUERY('{ "váha":10 }', '$.weight') |+------------------------------ ---------------+| NULL |+--------------------------------------------+ 

Chcete-li vrátit skalární hodnotu, použijte JSON_VALUE() funkce.

Nulové argumenty

Pokud je některý argument NULL , výsledkem je NULL :

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

Výsledek:

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

Nesprávný počet parametrů

Pokud nezadáte žádné argumenty, dojde k chybě:

SELECT JSON_QUERY(); 

Výsledek:

CHYBA 1582 (42000):Nesprávný počet parametrů ve volání nativní funkce 'JSON_QUERY'

Je to stejné, když poskytnete příliš málo nebo příliš mnoho argumentů:

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

Výsledek:

CHYBA 1582 (42000):Nesprávný počet parametrů ve volání nativní funkce 'JSON_QUERY'

  1. Jak vytvořit soubor protokolu v Oracle pomocí PL/SQL?

  2. SQLAlchemy:filtrování podle hodnot uložených ve vnořeném seznamu pole JSONB

  3. Jak velká může být databáze MySQL, než začne klesat výkon

  4. Jak mohu přihlásit a najít nejdražší dotazy?