W MySQL JSON_VALUE() funkcja wyodrębnia wartość z dokumentu JSON w określonej ścieżce.
Funkcja została wprowadzona w MySQL 8.0.21.
Składnia
Składnia wygląda tak:
JSON_VALUE(json_doc, path [RETURNING type] [on_empty] [on_error]) Gdzie:
on_empty:
{NULL | ERROR | DEFAULT value} ON EMPTY
on_error:
{NULL | ERROR | DEFAULT value} ON ERROR Przykład
Oto prosty przykład do zademonstrowania:
SELECT JSON_VALUE( '{ "name" : "Wag", "type" : "Dog" }', '$.type' ); Wynik:
Dog
Tablice
Oto przykład pobierania wartości z tablicy:
SELECT JSON_VALUE( '{ "name" : "Wag", "scores" : [ 25, 36, 48 ] }', '$.scores[1]' ); Wynik:
36
Tablice bazują na zerach, więc 1 zwraca drugi element (0 zwróciłby pierwszy).
Osadzone dokumenty
Oto przykład pobierania wartości z osadzonego obiektu:
SELECT JSON_VALUE(
'{
"_id" : 1,
"details" : {
"name" : "Wag",
"type" : "Dog"
}
}',
'$.details.type'
); Wynik:
Dog
Typ zwrotu
Oto przykład określenia typu zwracanego:
SELECT JSON_VALUE(
'{
"_id" : 1,
"details" : {
"name" : "Wag",
"type" : "Dog"
}
}',
'$.details' RETURNING json
); Wynik:
{"name": "Wag", "type": "Dog"}
Jeśli nie określisz typu zwracanego, typem zwracanym jest VARCHAR(512) .
Puste wyniki
Domyślnie, jeśli żadne dane nie zostaną znalezione w określonej ścieżce, NULL jest zwracany:
SELECT JSON_VALUE(
'{
"name" : "Wag",
"type" : "Dog"
}',
'$.score'
); Wynik:
NULL
Można jednak użyć następujących opcji, aby wyraźnie określić, co ma się stać, gdy w podanej ścieżce nie zostaną znalezione żadne dane:
NULL ON EMPTY:Funkcja zwracaNULL; to jest zachowanie domyślne.DEFAULT:podanavalueNA PUSTYvaluejest zwracany. Typ wartości musi być zgodny z typem zwracanym.ERROR ON EMPTY:Funkcja zgłasza błąd.
Przykład:
SELECT JSON_VALUE(
'{
"name" : "Wag",
"type" : "Dog"
}',
'$.score'
DEFAULT 'Nothing found' ON EMPTY
); Wynik:
Nothing found
Błędy
Aby określić, co się stanie, gdy wystąpi błąd, można użyć następujących informacji:
NULL ON ERROR:JSON_VALUE()zwracaNULL; to jest zachowanie domyślne.DEFAULT:To jest zwracana wartość; jego wartość musi odpowiadać wartości typu zwracanego.valuePRZY BŁĘDZIEERROR ON ERROR:Pojawia się błąd.
Jeśli jest używany, ON EMPTY musi poprzedzać każdy ON ERROR klauzula. Określenie ich w złej kolejności skutkuje błędem składni.
Indeksy
Jak wspomniano w uwagach do wydania MySQL 8.0.21, JSON_VALUE() funkcja upraszcza tworzenie indeksów w JSON kolumny. Wywołanie JSON_VALUE( jest równoważne z wywołaniem json_doc , path POWRÓT type )CAST( JSON_UNQUOTE( JSON_EXTRACT( .json_doc) , path ) ) JAKO type )
Oto przykład użyty w informacjach o wydaniu:
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)) )
);