W MariaDB, JSON_QUERY()
to wbudowana funkcja, która zwraca obiekt lub tablicę z dokumentu JSON na podstawie podanej ścieżki.
Jest podobny do JSON_VALUE()
funkcja, z wyjątkiem tego, że zwraca obiekt lub tablicę zamiast skalara (JSON_VALUE()
zwraca skalar).
Składnia
Składnia wygląda tak:
JSON_QUERY(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 = '
{
"_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_QUERY(@json_document, '$.details');
Wynik:
{ "type" : "Dog", "weight" : 20, "awards" : { "Florida Dog Awards" : "Top Dog", "New York Marathon" : "Fastest Dog", "Sumo 2020" : "Biggest Dog" } }
Możemy użyć notacji kropkowej, aby przejść do następnego zagnieżdżonego obiektu:
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_QUERY(@json_document, '$.details.awards');
Wynik:
{ "Florida Dog Awards" : "Top Dog", "New York Marathon" : "Fastest Dog", "Sumo 2020" : "Biggest Dog" }
Tablice
Oto przykład zwracania tablicy:
SET @json_document = '
{
"_id" : 1,
"awards" : [ "Top Dog", "Best Dog", "Biggest Dog" ]
}
';
SELECT JSON_QUERY(@json_document, '$.awards');
Wynik:
+------------------------------------------+ | JSON_QUERY(@json_document, '$.awards') | +------------------------------------------+ | [ "Top Dog", "Best Dog", "Biggest Dog" ] | +------------------------------------------+
Jeśli chcesz zwrócić rzeczywisty element tablicy, wypróbuj JSON_VALUE()
funkcja.
Nieistniejąca ścieżka
Przekazanie ścieżki, która nie istnieje w dokumencie JSON, daje w wyniku NULL
.
Przykład:
SET @json_document = '
{
"_id" : 1,
"awards" : [ "Top Dog", "Best Dog", "Biggest Dog" ]
}
';
SELECT JSON_QUERY(@json_document, '$.type');
Wynik:
+--------------------------------------+ | JSON_QUERY(@json_document, '$.type') | +--------------------------------------+ | NULL | +--------------------------------------+
Wartości skalarne
Próba zwrócenia wartości skalarnej zwraca NULL
.
Przykład:
SELECT JSON_QUERY('{ "weight": 10 }', '$.weight');
Wynik:
+--------------------------------------------+ | JSON_QUERY('{ "weight": 10 }', '$.weight') | +--------------------------------------------+ | NULL | +--------------------------------------------+
Aby zwrócić wartość skalarną, użyj JSON_VALUE()
funkcja.
Argumenty zerowe
Jeśli jakikolwiek argument ma wartość NULL
, wynik to NULL
:
SELECT
JSON_QUERY(null, '$.type'),
JSON_QUERY('{"a":1}', null);
Wynik:
+----------------------------+-----------------------------+ | JSON_QUERY(null, '$.type') | JSON_QUERY('{"a":1}', null) | +----------------------------+-----------------------------+ | NULL | NULL | +----------------------------+-----------------------------+
Nieprawidłowa liczba parametrów
Brak argumentów skutkuje błędem:
SELECT JSON_QUERY();
Wynik:
ERROR 1582 (42000): Incorrect parameter count in the call to native function 'JSON_QUERY'
Tak samo jest, gdy podasz za mało lub za dużo argumentów:
SELECT JSON_QUERY('{ "a": 1}');
Wynik:
ERROR 1582 (42000): Incorrect parameter count in the call to native function 'JSON_QUERY'