sql >> Database teknologi >  >> RDS >> Mysql

JSON_VALUE() i MySQL

I MySQL er JSON_VALUE() funktion udtrækker en værdi fra et JSON-dokument på den angivne sti.

Funktionen blev introduceret i MySQL 8.0.21.

Syntaks

Syntaksen ser sådan ud:

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

Hvor:

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

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

Eksempel

Her er et simpelt eksempel til at demonstrere:

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

Resultat:

Dog

Arrays

Her er et eksempel på at få en værdi fra et array:

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

Resultat:

36

Arrays er nul-baserede, så 1 returnerer det andet element (0 ville returnere den første).

Indlejrede dokumenter

Her er et eksempel på at få en værdi fra et indlejret objekt:

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

Resultat:

Dog

Returtype

Her er et eksempel på angivelse af returtypen:

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

Resultat:

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

Hvis du ikke angiver returtypen, er returtypen VARCHAR(512) .

Tomme resultater

Som standard, hvis ingen data findes på den angivne sti, NULL returneres:

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

Resultat:

NULL

Følgende muligheder kan dog bruges til eksplicit at angive, hvad der skal ske, når der ikke findes data på den givne sti:

  • NULL ON EMPTY :Funktionen returnerer NULL; dette er standardadfærden.
  • DEFAULT value PÅ TOM :den angivne value er returneret. Værdiens type skal matche returtypens.
  • ERROR ON EMPTY :Funktionen giver en fejl.

Eksempel:

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

Resultat:

Nothing found

Fejl

Følgende kan bruges til at angive, hvad der sker, når der opstår en fejl:

  • NULL ON ERROR :JSON_VALUE() returnerer NULL; dette er standardadfærden.
  • DEFAULT value PÅ FEJL :Dette er den returnerede værdi; dens værdi skal matche returtypens værdi.
  • ERROR ON ERROR :Der opstår en fejl.

Hvis brugt, ON EMPTY skal gå forud for enhver ON ERROR klausul. Angivelse af dem i den forkerte rækkefølge resulterer i en syntaksfejl.

Indekser

Som nævnt i MySQL 8.0.21 release notes, JSON_VALUE() funktion forenkler oprettelsen af ​​indekser på JSON kolonner. Et kald til JSON_VALUE(json_doc , path RETURNERER type ) svarer til at kalde CAST( JSON_UNQUOTE( JSON_EXTRACT(json_doc , path ) ) AS type ) .

Her er eksemplet brugt i udgivelsesbemærkningerne:

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. MariaDB CURRENT_TIME() Forklaret

  2. Oprettelse af en datamodel for samkørsel

  3. Dvale kortlægning mellem PostgreSQL enum og Java enum

  4. Hvordan opretter og forespørger jeg linkede databaseservere i SQL Server?