Mysql
 sql >> Datenbank >  >> RDS >> Mysql

JSON_VALUE() in MySQL

In MySQL der JSON_VALUE() Funktion extrahiert einen Wert aus einem JSON-Dokument im angegebenen Pfad.

Die Funktion wurde in MySQL 8.0.21 eingeführt.

Syntax

Die Syntax sieht so aus:

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

Wo:

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

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

Beispiel

Hier ist ein einfaches Beispiel zur Veranschaulichung:

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

Ergebnis:

Dog

Arrays

Hier ist ein Beispiel für das Abrufen eines Werts aus einem Array:

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

Ergebnis:

36

Arrays sind nullbasiert, also 1 gibt das zweite Element zurück (0 würde die erste zurückgeben).

Eingebettete Dokumente

Hier ist ein Beispiel für das Abrufen eines Werts von einem eingebetteten Objekt:

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

Ergebnis:

Dog

Rückgabetyp

Hier ist ein Beispiel für die Angabe des Rückgabetyps:

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

Ergebnis:

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

Wenn Sie den Rückgabetyp nicht angeben, ist der Rückgabetyp VARCHAR(512) .

Leere Ergebnisse

Wenn im angegebenen Pfad keine Daten gefunden werden, wird standardmäßig NULL wird zurückgegeben:

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

Ergebnis:

NULL

Die folgenden Optionen können jedoch verwendet werden, um explizit festzulegen, was passieren soll, wenn keine Daten im angegebenen Pfad gefunden werden:

  • NULL ON EMPTY :Die Funktion gibt NULL zurück; dies ist das Standardverhalten.
  • DEFAULT value AUF LEER :der bereitgestellte value ist zurück gekommen. Der Typ des Werts muss mit dem des Rückgabetyps übereinstimmen.
  • ERROR ON EMPTY :Die Funktion gibt einen Fehler aus.

Beispiel:

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

Ergebnis:

Nothing found

Fehler

Folgendes kann verwendet werden, um festzulegen, was passiert, wenn ein Fehler auftritt:

  • NULL ON ERROR :JSON_VALUE() gibt NULL zurück; dies ist das Standardverhalten.
  • DEFAULT value BEI FEHLER :Dies ist der zurückgegebene Wert; sein Wert muss mit dem des Rückgabetyps übereinstimmen.
  • ERROR ON ERROR :Ein Fehler wird ausgegeben.

Falls verwendet, ON EMPTY muss jedem ON ERROR vorangestellt werden Klausel. Die Angabe in der falschen Reihenfolge führt zu einem Syntaxfehler.

Indizes

Wie in den Versionshinweisen zu MySQL 8.0.21 erwähnt, ist der JSON_VALUE() Funktion vereinfacht die Erstellung von Indizes auf JSON Säulen. Ein Aufruf von JSON_VALUE(json_doc , path RETURNING type ) entspricht dem Aufruf von CAST( JSON_UNQUOTE( JSON_EXTRACT(json_doc , path ) ) AS type ) .

Hier ist das in den Versionshinweisen verwendete Beispiel:

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)) )
);