In MariaDB, JSON_CONTAINS_PATH() is een ingebouwde functie die aangeeft of een bepaald JSON-document gegevens bevat op het opgegeven pad of de opgegeven paden.
Het retourneert 1 als het document gegevens bevat op het/de opgegeven pad(en), 0 als dat niet het geval is, en NULL als een van de argumenten NULL is .
Syntaxis
De syntaxis gaat als volgt:
JSON_CONTAINS_PATH(json_doc, return_arg, path[, path] ...)
Waar json_doc is het JSON-document en path specificeert het pad waarnaar gegevens moeten worden gezocht. Er kunnen meerdere paden worden opgegeven.
De return_arg argument bepaalt hoe om te gaan met meerdere paden. Het kan one zijn of all .
one– De functie retourneert1als er ten minste één pad bestaat binnen het JSON-document.all– De functie retourneert1alleen als alle paden bestaan in het JSON-document.
Voorbeeld
Hier is een voorbeeld om te demonstreren.
SET @json_document = '{ "name": "Wag", "weight": 10 }';
SELECT JSON_CONTAINS_PATH(@json_document, 'one', '$.name'); Resultaat:
+-----------------------------------------------------+ | JSON_CONTAINS_PATH(@json_document, 'one', '$.name') | +-----------------------------------------------------+ | 1 | +-----------------------------------------------------+
In dit geval bestaat het pad en is het resultaat 1 .
In het volgende voorbeeld bestaat het pad niet en is het resultaat 0 :
SET @json_document = '{ "name": "Wag", "weight": 10 }';
SELECT JSON_CONTAINS_PATH(@json_document, 'one', '$.type'); Resultaat:
+-----------------------------------------------------+ | JSON_CONTAINS_PATH(@json_document, 'one', '$.type') | +-----------------------------------------------------+ | 0 | +-----------------------------------------------------+
Meerdere paden
Hier zijn enkele voorbeelden die zoeken naar meerdere paden in het document:
SET @json_document = '{ "name": "Wag", "weight": 10 }';
SELECT JSON_CONTAINS_PATH(
@json_document,
'one',
'$.type',
'$.weight'
) AS Result; Resultaat:
+--------+ | Result | +--------+ | 1 | +--------+
In dit voorbeeld hebben we naar twee paden gezocht. Het ene pad bestaat en het andere niet. Maar we hebben een 1 hoe dan ook (een positief resultaat). Dit komt omdat we one . hebben gebruikt als tweede argument. De one geeft aan dat we een 1 . krijgen als een van de paden bestaat.
Dit is wat er gebeurt als we all gebruiken als tweede argument:
SET @json_document = '{ "name": "Wag", "weight": 10 }';
SELECT JSON_CONTAINS_PATH(
@json_document,
'all',
'$.type',
'$.weight'
) AS Result; Resultaat:
+--------+ | Result | +--------+ | 0 | +--------+
Deze keer is het resultaat 0 , omdat niet alle paden in het JSON-document bestaan.
Als we het ontbrekende pad wijzigen ($.type ) naar een bestaande, krijgen we een ander resultaat:
SET @json_document = '{ "name": "Wag", "weight": 10 }';
SELECT JSON_CONTAINS_PATH(
@json_document,
'all',
'$.name',
'$.weight'
) AS Result; Resultaat:
+--------+ | Result | +--------+ | 1 | +--------+
Arrays
Hier is een voorbeeld dat test of een bepaalde index binnen een array bestaat:
SET @json_document = '
{
"name": "Wag",
"awards" : [ "Top Dog", "Best Dog", "Biggest Dog" ]
}
';
SELECT JSON_CONTAINS_PATH(
@json_document,
'one',
'$.awards[2]'
) AS Result; Resultaat:
+--------+ | Result | +--------+ | 1 | +--------+
En dit is wat er gebeurt als we de index verhogen tot een niet-bestaande index:
SET @json_document = '
{
"name": "Wag",
"awards" : [ "Top Dog", "Best Dog", "Biggest Dog" ]
}
';
SELECT JSON_CONTAINS_PATH(
@json_document,
'one',
'$.awards[3]'
) AS Result; Resultaat:
+--------+ | Result | +--------+ | 0 | +--------+
Geneste structuren
Hier is een voorbeeld dat zoekt naar een pad in een genest document:
SET @json_document = '
{
"name": "Wag",
"specs": {
"weight": 10,
"height": 30
}
}
';
SELECT JSON_CONTAINS_PATH(
@json_document,
'one',
'$.specs.height'
) AS Result; Resultaat:
+--------+ | Result | +--------+ | 1 | +--------+
Nullargumenten
Als een argument NULL is , het resultaat is NULL :
SET @json_document = '{ "name": "Wag", "weight": 10 }';
SELECT
JSON_CONTAINS_PATH(null, 'one', '$.weight') AS a,
JSON_CONTAINS_PATH(@json_document, null, '$.weight') AS b,
JSON_CONTAINS_PATH(@json_document, 'one', null) AS c; Resultaat:
+------+------+------+ | a | b | c | +------+------+------+ | NULL | NULL | NULL | +------+------+------+
Onjuist aantal parameters
Het verstrekken van geen argumenten resulteert in een fout:
SELECT JSON_CONTAINS_PATH(); Resultaat:
ERROR 1582 (42000): Incorrect parameter count in the call to native function 'JSON_CONTAINS_PATH'
Hetzelfde gebeurt als je niet genoeg argumenten doorgeeft:
SET @json_document = '{ "name": "Wag", "weight": 10 }';
SELECT JSON_CONTAINS_PATH(@json_document); Resultaat:
ERROR 1582 (42000): Incorrect parameter count in the call to native function 'JSON_CONTAINS_PATH'