sql >> Database >  >> RDS >> Mysql

JSON_VALUE() in MySQL

In MySQL is de JSON_VALUE() functie extraheert een waarde uit een JSON-document op het opgegeven pad.

De functie is geïntroduceerd in MySQL 8.0.21.

Syntaxis

De syntaxis gaat als volgt:

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

Waar:

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

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

Voorbeeld

Hier is een eenvoudig voorbeeld om te demonstreren:

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

Resultaat:

Dog

Arrays

Hier is een voorbeeld van het verkrijgen van een waarde uit een array:

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

Resultaat:

36

Arrays zijn gebaseerd op nul, dus 1 geeft het tweede element terug (0 zou de eerste teruggeven).

Ingesloten documenten

Hier is een voorbeeld van het verkrijgen van een waarde van een ingesloten object:

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

Resultaat:

Dog

Retourtype

Hier is een voorbeeld van het specificeren van het retourtype:

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

Resultaat:

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

Als u het retourtype niet opgeeft, is het retourtype VARCHAR(512) .

Resultaten leegmaken

Als er geen gegevens worden gevonden op het opgegeven pad, wordt standaard NULL wordt geretourneerd:

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

Resultaat:

NULL

De volgende opties kunnen echter worden gebruikt om expliciet te specificeren wat er moet gebeuren als er geen gegevens worden gevonden op het opgegeven pad:

  • NULL ON EMPTY :De functie retourneert NULL; dit is het standaardgedrag.
  • DEFAULT value OP LEEG :de opgegeven value wordt teruggestuurd. Het type van de waarde moet overeenkomen met dat van het retourtype.
  • ERROR ON EMPTY :De functie geeft een fout.

Voorbeeld:

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

Resultaat:

Nothing found

Fouten

Het volgende kan worden gebruikt om aan te geven wat er gebeurt als er een fout optreedt:

  • NULL ON ERROR :JSON_VALUE() retourneert NULL; dit is het standaardgedrag.
  • DEFAULT value OP FOUT :Dit is de geretourneerde waarde; de waarde ervan moet overeenkomen met die van het retourtype.
  • ERROR ON ERROR :Er is een fout opgetreden.

Indien gebruikt, ON EMPTY moet voorafgaan aan een ON ERROR clausule. Als u ze in de verkeerde volgorde specificeert, resulteert dit in een syntaxisfout.

Indexen

Zoals vermeld in de MySQL 8.0.21 release-opmerkingen, is de JSON_VALUE() functie vereenvoudigt het maken van indexen op JSON kolommen. Een aanroep naar JSON_VALUE(json_doc , path TERUGKEER type ) is gelijk aan het aanroepen van CAST( JSON_UNQUOTE( JSON_EXTRACT(json_doc) , path ) ) AS type ) .

Dit is het voorbeeld dat wordt gebruikt in de release-opmerkingen:

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. verander de kolom voor het neerzetten van tabellen in de Oracle-database

  2. Is er een manier om een ​​benoemde constante in een PostgreSQL-query te definiëren?

  3. VBA-code om gekoppelde tabel met primaire sleutel toe te voegen

  4. Slash of geen Slash?