In MariaDB, JSON_QUERY()
is een ingebouwde functie die een object of array retourneert uit een JSON-document, op basis van het opgegeven pad.
Het is vergelijkbaar met de JSON_VALUE()
functie, behalve dat het een object of array retourneert in plaats van een scalaire waarde (JSON_VALUE()
geeft een scalair terug).
Syntaxis
De syntaxis gaat als volgt:
JSON_QUERY(json_doc, path)
Waar json_doc
is het JSON-document, en path
is een pad binnen het document.
Voorbeeld
Hier is een voorbeeld om te demonstreren.
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');
Resultaat:
{ "type" : "Dog", "weight" : 20, "awards" : { "Florida Dog Awards" : "Top Dog", "New York Marathon" : "Fastest Dog", "Sumo 2020" : "Biggest Dog" } }
We kunnen puntnotatie gebruiken om naar het volgende geneste object te gaan:
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');
Resultaat:
{ "Florida Dog Awards" : "Top Dog", "New York Marathon" : "Fastest Dog", "Sumo 2020" : "Biggest Dog" }
Arrays
Hier is een voorbeeld van het retourneren van een array:
SET @json_document = '
{
"_id" : 1,
"awards" : [ "Top Dog", "Best Dog", "Biggest Dog" ]
}
';
SELECT JSON_QUERY(@json_document, '$.awards');
Resultaat:
+------------------------------------------+ | JSON_QUERY(@json_document, '$.awards') | +------------------------------------------+ | [ "Top Dog", "Best Dog", "Biggest Dog" ] | +------------------------------------------+
Als je een echt array-element wilt retourneren, probeer dan de JSON_VALUE()
functie.
Niet-bestaand pad
Het doorgeven van een pad dat niet bestaat in het JSON-document resulteert in NULL
.
Voorbeeld:
SET @json_document = '
{
"_id" : 1,
"awards" : [ "Top Dog", "Best Dog", "Biggest Dog" ]
}
';
SELECT JSON_QUERY(@json_document, '$.type');
Resultaat:
+--------------------------------------+ | JSON_QUERY(@json_document, '$.type') | +--------------------------------------+ | NULL | +--------------------------------------+
Scalaire waarden
Poging om een scalaire waarde te retourneren geeft NULL
.
Voorbeeld:
SELECT JSON_QUERY('{ "weight": 10 }', '$.weight');
Resultaat:
+--------------------------------------------+ | JSON_QUERY('{ "weight": 10 }', '$.weight') | +--------------------------------------------+ | NULL | +--------------------------------------------+
Gebruik de JSON_VALUE()
. om een scalaire waarde te retourneren functie.
Nullargumenten
Als een argument NULL
is , het resultaat is NULL
:
SELECT
JSON_QUERY(null, '$.type'),
JSON_QUERY('{"a":1}', null);
Resultaat:
+----------------------------+-----------------------------+ | JSON_QUERY(null, '$.type') | JSON_QUERY('{"a":1}', null) | +----------------------------+-----------------------------+ | NULL | NULL | +----------------------------+-----------------------------+
Onjuist aantal parameters
Het verstrekken van geen argumenten resulteert in een fout:
SELECT JSON_QUERY();
Resultaat:
ERROR 1582 (42000): Incorrect parameter count in the call to native function 'JSON_QUERY'
Hetzelfde geldt wanneer u te weinig of te veel argumenten geeft:
SELECT JSON_QUERY('{ "a": 1}');
Resultaat:
ERROR 1582 (42000): Incorrect parameter count in the call to native function 'JSON_QUERY'