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
:podanavalue
NA PUSTYvalue
jest 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.value
PRZY 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)) )
);