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
:poskytnutávalue
ON PRÁZDNÝ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
:Toto je vrácená hodnota; jeho hodnota se musí shodovat s hodnotou návratového typu.value
ON CHYBAERROR 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(
je ekvivalentní volání json_doc
, path
VRACENÍ type
)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)) )
);