I MariaDB, JSON_CONTAINS_PATH() är en inbyggd funktion som indikerar om ett givet JSON-dokument innehåller data vid den eller de angivna sökvägarna.
Den returnerar 1 om dokumentet innehåller data vid den/de angivna sökvägen, 0 om den inte gör det, och NULL om något av argumenten är NULL .
Syntax
Syntaxen ser ut så här:
JSON_CONTAINS_PATH(json_doc, return_arg, path[, path] ...)
Där json_doc är JSON-dokumentet och path anger sökvägen för att hitta data. Flera vägar kan tillhandahållas.
return_arg argument bestämmer hur man hanterar flera vägar. Det kan vara one eller all .
one– Funktionen returnerar1om det finns minst en sökväg i JSON-dokumentet.all– Funktionen returnerar1endast om alla sökvägar finns i JSON-dokumentet.
Exempel
Här är ett exempel att visa.
SET @json_document = '{ "name": "Wag", "weight": 10 }';
SELECT JSON_CONTAINS_PATH(@json_document, 'one', '$.name'); Resultat:
+-----------------------------------------------------+ | JSON_CONTAINS_PATH(@json_document, 'one', '$.name') | +-----------------------------------------------------+ | 1 | +-----------------------------------------------------+
I det här fallet finns sökvägen, och resultatet är 1 .
I nästa exempel existerar inte sökvägen, och resultatet är 0 :
SET @json_document = '{ "name": "Wag", "weight": 10 }';
SELECT JSON_CONTAINS_PATH(@json_document, 'one', '$.type'); Resultat:
+-----------------------------------------------------+ | JSON_CONTAINS_PATH(@json_document, 'one', '$.type') | +-----------------------------------------------------+ | 0 | +-----------------------------------------------------+
Flera vägar
Här är några exempel som söker efter flera sökvägar i dokumentet:
SET @json_document = '{ "name": "Wag", "weight": 10 }';
SELECT JSON_CONTAINS_PATH(
@json_document,
'one',
'$.type',
'$.weight'
) AS Result; Resultat:
+--------+ | Result | +--------+ | 1 | +--------+
I det här exemplet sökte vi efter två vägar. En väg finns och den andra inte. Men vi fick en 1 i alla fall (ett positivt resultat). Detta beror på att vi använde one som det andra argumentet. Den one anger att vi får en 1 om någon av vägarna finns.
Så här händer om vi använder all som det andra argumentet:
SET @json_document = '{ "name": "Wag", "weight": 10 }';
SELECT JSON_CONTAINS_PATH(
@json_document,
'all',
'$.type',
'$.weight'
) AS Result; Resultat:
+--------+ | Result | +--------+ | 0 | +--------+
Den här gången är resultatet 0 , eftersom inte alla sökvägar finns i JSON-dokumentet.
Om vi ändrar den saknade sökvägen ($.type ) än en som finns får vi ett annat resultat:
SET @json_document = '{ "name": "Wag", "weight": 10 }';
SELECT JSON_CONTAINS_PATH(
@json_document,
'all',
'$.name',
'$.weight'
) AS Result; Resultat:
+--------+ | Result | +--------+ | 1 | +--------+
Arrayer
Här är ett exempel som testar om ett givet index finns inom en array:
SET @json_document = '
{
"name": "Wag",
"awards" : [ "Top Dog", "Best Dog", "Biggest Dog" ]
}
';
SELECT JSON_CONTAINS_PATH(
@json_document,
'one',
'$.awards[2]'
) AS Result; Resultat:
+--------+ | Result | +--------+ | 1 | +--------+
Och här är vad som händer om vi ökar indexet till ett obefintligt:
SET @json_document = '
{
"name": "Wag",
"awards" : [ "Top Dog", "Best Dog", "Biggest Dog" ]
}
';
SELECT JSON_CONTAINS_PATH(
@json_document,
'one',
'$.awards[3]'
) AS Result; Resultat:
+--------+ | Result | +--------+ | 0 | +--------+
Inkapslade strukturer
Här är ett exempel som letar efter en sökväg i ett kapslat dokument:
SET @json_document = '
{
"name": "Wag",
"specs": {
"weight": 10,
"height": 30
}
}
';
SELECT JSON_CONTAINS_PATH(
@json_document,
'one',
'$.specs.height'
) AS Result; Resultat:
+--------+ | Result | +--------+ | 1 | +--------+
Nollargument
Om något argument är NULL , resultatet är 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; Resultat:
+------+------+------+ | a | b | c | +------+------+------+ | NULL | NULL | NULL | +------+------+------+
Felaktig parameterräkning
Att inte tillhandahålla några argument resulterar i ett fel:
SELECT JSON_CONTAINS_PATH(); Resultat:
ERROR 1582 (42000): Incorrect parameter count in the call to native function 'JSON_CONTAINS_PATH'
Samma sak händer när du inte skickar tillräckligt med argument:
SET @json_document = '{ "name": "Wag", "weight": 10 }';
SELECT JSON_CONTAINS_PATH(@json_document); Resultat:
ERROR 1582 (42000): Incorrect parameter count in the call to native function 'JSON_CONTAINS_PATH'