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 retourneert1
als er ten minste één pad bestaat binnen het JSON-document.all
– De functie retourneert1
alleen 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'