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

MariaDB JSON_EXTRACT() Vysvětleno

V MariaDB, JSON_EXTRACT() je vestavěná funkce, která extrahuje data z dokumentu JSON na základě dané cesty nebo cest.

Může vrátit jednotlivé hodnoty a více hodnot. Pokud je jedna hodnota shodná, je vrácena jedna hodnota. Pokud se shoduje více hodnot, pak jsou tyto hodnoty vráceny v poli.

Syntaxe

Syntaxe vypadá takto:

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

Kde json_doc je dokument JSON a každá path argument je cesta v dokumentu.

Příklad

Zde je příklad k demonstraci.

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

Výsledek:

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

Více cest

Zde je příklad zadání více cest za účelem vrácení více hodnot z dokumentu JSON.

Když vrátíte více hodnot, budou vráceny v poli.

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

Výsledek:

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

Neexistující cesty

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

Příklad:

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

Výsledek:

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

Pokud je však předáno více cest a alespoň jedna z nich se shoduje, je shodná hodnota extrahována a vrácena v poli. To platí, i když je extrahována pouze jedna hodnota.

Příklad:

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

Výsledek:

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

Pole

Zde je příklad extrahování dat z pole:

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

Výsledek:

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

Pole jsou založeny na nule, a proto $.awards[0] extrahuje první prvek z awards pole.

Vnořené objekty

Zde je příklad extrahování dat z objektu vnořeného do jiného 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_EXTRACT(
    @json_document, 
    '$.details.awards.New York Marathon'
    ) AS Result;

Výsledek:

+---------------+
| Result        |
+---------------+
| "Fastest Dog" |
+---------------+

Pokud bychom však chtěli získat všechna ocenění, mohli bychom zkrátit cestu k $.details.awards :

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;

Výsledek:

+---------------------------------------------------------------------------------------------------+
| Result                                                                                            |
+---------------------------------------------------------------------------------------------------+
| {"Florida Dog Awards": "Top Dog", "New York Marathon": "Fastest Dog", "Sumo 2020": "Biggest Dog"} |
+---------------------------------------------------------------------------------------------------+

Zkrášlení výsledku

Výsledek můžeme usnadnit čtení předáním JSON_EXTRACT() na JSON_DETAILED() funkce:

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;

Výsledek:

+------------------------------------------------+
| Result                                         |
+------------------------------------------------+
| {
    "Florida Dog Awards": "Top Dog",
    "New York Marathon": "Fastest Dog",
    "Sumo 2020": "Biggest Dog"
} |
+------------------------------------------------+

Nulové argumenty

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

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

Výsledek:

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

Nesprávný počet parametrů

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

SELECT JSON_EXTRACT();

Výsledek:

ERROR 1582 (42000): Incorrect parameter count in the call to native function 'JSON_EXTRACT'

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

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

Výsledek:

ERROR 1582 (42000): Incorrect parameter count in the call to native function 'JSON_EXTRACT'

  1. Nejlepší postup pro implementaci zabezpečené databáze pro zařízení Android

  2. Celočíselné pole MySQL je v PHP vráceno jako řetězec

  3. SQL Server Fulltextové vyhledávání Únikové znaky?

  4. Jaký je rozdíl mezi char, nchar, varchar a nvarchar na serveru SQL?