sql >> Databáze >  >> RDS >> Mysql

JSON_VALUE() v MySQL

V MySQL je to JSON_VALUE() funkce extrahuje hodnotu z dokumentu JSON na zadané cestě.

Funkce byla představena v MySQL 8.0.21.

Syntaxe

Syntaxe vypadá takto:

JSON_VALUE(json_doc, path [RETURNING type] [on_empty] [on_error])

Kde:

on_empty:
    {NULL | ERROR | DEFAULT value} ON EMPTY

on_error:
    {NULL | ERROR | DEFAULT value} ON ERROR

Příklad

Zde je jednoduchý příklad k demonstraci:

SELECT JSON_VALUE( '{ "name" : "Wag", "type" : "Dog" }', '$.type' );

Výsledek:

Dog

Pole

Zde je příklad získání hodnoty z pole:

SELECT JSON_VALUE( '{ "name" : "Wag", "scores" : [ 25, 36, 48 ] }', '$.scores[1]' );

Výsledek:

36

Pole jsou založeny na nule, takže 1 vrátí druhý prvek (0 vrátí první).

Vložené dokumenty

Zde je příklad získání hodnoty z vloženého objektu:

SELECT JSON_VALUE(
    '{ 
        "_id" : 1, 
        "details" : { 
            "name" : "Wag",
            "type" : "Dog"
            } 
    }', 
    '$.details.type' 
    );

Výsledek:

Dog

Typ návratu

Zde je příklad určení návratového typu:

SELECT JSON_VALUE(
    '{ 
        "_id" : 1, 
        "details" : { 
            "name" : "Wag",
            "type" : "Dog"
            } 
    }', 
    '$.details' RETURNING json
    );

Výsledek:

{"name": "Wag", "type": "Dog"}

Pokud neurčíte návratový typ, návratový typ je VARCHAR(512) .

Prázdné výsledky

Ve výchozím nastavení, pokud nejsou na zadané cestě nalezena žádná data, NULL je vráceno:

SELECT JSON_VALUE(
    '{ 
        "name" : "Wag",
        "type" : "Dog"
    }', 
    '$.score'
    );

Výsledek:

NULL

Následující možnosti však lze použít k explicitnímu určení toho, co se má stát, když na dané cestě nebudou nalezena žádná data:

  • NULL ON EMPTY :Funkce vrací NULL; toto je výchozí chování.
  • DEFAULT value ON PRÁZDNÝ :poskytnutá value je vráceno. Typ hodnoty se musí shodovat s typem návratu.
  • ERROR ON EMPTY :Funkce vyvolá chybu.

Příklad:

SELECT JSON_VALUE(
    '{ 
        "name" : "Wag",
        "type" : "Dog"
    }', 
    '$.score' 
    DEFAULT 'Nothing found' ON EMPTY
    );

Výsledek:

Nothing found

Chyby

Následující lze použít k určení, co se stane, když dojde k chybě:

  • NULL ON ERROR :JSON_VALUE() vrátí NULL; toto je výchozí chování.
  • DEFAULT value ON CHYBA :Toto je vrácená hodnota; jeho hodnota se musí shodovat s hodnotou návratového typu.
  • ERROR ON ERROR :Došlo k chybě.

Pokud je použit, ON EMPTY musí předcházet jakékoli ON ERROR doložka. Pokud je zadáte ve špatném pořadí, dojde k chybě syntaxe.

Indexy

Jak je uvedeno v poznámkách k vydání MySQL 8.0.21, JSON_VALUE() zjednodušuje vytváření indexů na JSON sloupců. Volání JSON_VALUE(json_doc , path VRACENÍ type ) je ekvivalentní volání CAST( JSON_UNQUOTE( JSON_EXTRACT(json_doc , path ) ) JAKO type ) .

Zde je příklad použitý v poznámkách k vydání:

CREATE TABLE inventory(
    items JSON,
    INDEX i1 ( (JSON_VALUE(items, '$.name' RETURNING CHAR(50))) ),
    INDEX i2 ( (JSON_VALUE(items, '$.price' RETURNING DECIMAL(5,2))) ),
    INDEX i3 ( (JSON_VALUE(items, '$.quantity' RETURNING UNSIGNED)) )
);

  1. Vraťte informace o verzi operačního systému na SQL Server pomocí zobrazení dynamické správy sys.dm_os_host_info

  2. Jak spustit, restartovat, zkontrolovat stav a zastavit server MySQL

  3. foreach %dopar% + RPostgreSQL

  4. PostgreSQL Connection Pooling s PgBouncer