W MariaDB, JSON_VALUE()
to wbudowana funkcja, która zwraca wartość skalarną z dokumentu JSON. Dokładniej, zwraca skalar określony przez podaną ścieżkę.
Składnia
Składnia wygląda tak:
JSON_VALUE(json_doc, path)
Gdzie json_doc
jest dokumentem JSON i path
to ścieżka w dokumencie.
Przykład
Oto przykład do zademonstrowania.
SET @json_document = '
{
"name": "Wag",
"type": "Dog",
"weight": 20
}
';
SELECT JSON_VALUE(@json_document, '$.name');
Wynik:
+--------------------------------------+ | JSON_VALUE(@json_document, '$.name') | +--------------------------------------+ | Wag | +--------------------------------------+
Nieistniejąca ścieżka
Przekazanie ścieżki, która nie istnieje w dokumencie JSON, daje w wyniku NULL
.
Przykład:
SET @json_document = '
{
"name": "Wag",
"type": "Dog",
"weight": 20
}
';
SELECT JSON_VALUE(@json_document, '$.color');
Wynik:
+---------------------------------------+ | JSON_VALUE(@json_document, '$.color') | +---------------------------------------+ | NULL | +---------------------------------------+
Tablice
Oto przykład zwracania danych z tablicy:
SET @json_document = '
{
"_id" : 1,
"awards" : [ "Top Dog", "Best Dog", "Biggest Dog" ]
}
';
SELECT JSON_VALUE(@json_document, '$.awards[1]');
Wynik:
+-------------------------------------------+ | JSON_VALUE(@json_document, '$.awards[1]') | +-------------------------------------------+ | Best Dog | +-------------------------------------------+
Tablice są liczone od zera, więc $.awards[1]
wyodrębnia drugi element awards
tablica.
Obiekty zagnieżdżone
Oto przykład pobierania wartości z obiektu zagnieżdżonego w innym obiekcie:
SET @json_document = '
{
"_id" : 1,
"name" : "Wag",
"details" : {
"type" : "Dog",
"weight" : 20,
"awards" : {
"Florida Dog Awards" : "Top Dog",
"New York Marathon" : "Fastest Dog",
"Sumo 2020" : "Biggest Dog"
}
}
}
';
SELECT JSON_VALUE(
@json_document,
'$.details.awards.Florida Dog Awards'
) AS Result;
Wynik:
+---------+ | Result | +---------+ | Top Dog | +---------+
Wartości nieskalarne
Próba zwrócenia wartości nieskalarnej (np. obiektu lub tablicy) zwraca NULL
.
Przykład:
SET @json_document = '
{
"_id" : 1,
"name" : "Wag",
"details" : {
"type" : "Dog",
"weight" : 20,
"awards" : {
"Florida Dog Awards" : "Top Dog",
"New York Marathon" : "Fastest Dog",
"Sumo 2020" : "Biggest Dog"
}
}
}
';
SELECT JSON_VALUE(
@json_document,
'$.details.awards'
) AS Result;
Wynik:
+--------+ | Result | +--------+ | NULL | +--------+
Aby zwrócić wartość nieskalarną, użyj JSON_QUERY()
funkcja lub JSON_EXTRACT()
funkcja.
Argumenty zerowe
Jeśli jakikolwiek argument ma wartość NULL
, wynik to NULL
:
SELECT
JSON_VALUE(null, '$.type'),
JSON_VALUE('{"a":1}', null);
Wynik:
+----------------------------+-----------------------------+ | JSON_VALUE(null, '$.type') | JSON_VALUE('{"a":1}', null) | +----------------------------+-----------------------------+ | NULL | NULL | +----------------------------+-----------------------------+
Nieprawidłowa liczba parametrów
Brak argumentów skutkuje błędem:
SELECT JSON_VALUE();
Wynik:
ERROR 1582 (42000): Incorrect parameter count in the call to native function 'JSON_VALUE'
Tak samo jest, gdy podasz za mało lub za dużo argumentów:
SELECT JSON_VALUE('{ "a": 1}');
Wynik:
ERROR 1582 (42000): Incorrect parameter count in the call to native function 'JSON_VALUE'