I MySQL, JSON_CONTAINS_PATH()
funktion testar om en angiven sökväg hittas i det givna JSON-dokumentet.
Om sökvägen hittas, JSON_CONTAINS_PATH()
returnerar 1
, annars returnerar den 0
.
Syntax
Syntaxen ser ut så här:
JSON_CONTAINS_PATH(json_doc, one_or_all, path[, path] ...)
Där json_doc
är JSON-dokumentet, one_or_all
är nyckelordet one
eller all
(för att ange om bara en sökväg behöver existera eller alla sökvägar måste finnas innan 1
returneras ), och path
är den faktiska vägen.
Exempel 1 – Grundläggande användning
Här är ett exempel för att visa grundläggande användning.
SET @doc = '{"a": 1, "b": 2, "c": {"d": 3}}'; SELECT JSON_CONTAINS_PATH(@doc, 'one', '$.a') AS Result;
Resultat:
+--------+ | Result | +--------+ | 1 | +--------+
Sökvägen $.a
finns i JSON-dokumentet, och därför är resultatet 1
. Vi använde one
som det andra argumentet men i det här fallet skulle vi få samma resultat om vi hade angett all
.
SET @doc = '{"a": 1, "b": 2, "c": {"d": 3}}'; SELECT JSON_CONTAINS_PATH(@doc, 'all', '$.a') AS Result;
Resultat:
+--------+ | Result | +--------+ | 1 | +--------+
Om vi anger en sökväg som inte finns får vi 0
. Exempel:
SET @doc = '{"a": 1, "b": 2, "c": {"d": 3}}'; SELECT JSON_CONTAINS_PATH(@doc, 'one', '$.z') AS Result;
Resultat:
+--------+ | Result | +--------+ | 0 | +--------+
Exempel 2 – Flera sökvägar
I följande exempel specificerar vi två sökvägar.
I det första exemplet finns en väg men den andra inte. Men eftersom jag använder one
som det andra argumentet är resultatet positivt (eftersom minst en av vägarna finns).
SET @doc = '{"a": 1, "b": 2, "c": {"d": 3}}'; SELECT JSON_CONTAINS_PATH(@doc, 'one', '$.a', '$.z') AS Result;
Resultat:
+--------+ | Result | +--------+ | 1 | +--------+
Om vi byter one
till all
vi får ett negativt resultat.
SET @doc = '{"a": 1, "b": 2, "c": {"d": 3}}'; SELECT JSON_CONTAINS_PATH(@doc, 'all', '$.a', '$.z') AS Result;
Resultat:
+--------+ | Result | +--------+ | 0 | +--------+
Detta beror på att all
nyckelordet kräver att alla sökvägar måste finnas i JSON-dokumentet innan det returnerar en 1
.
Exempel 3 – Punktnotation
Du kan använda punktnotation för att indikera specifika sökvägar i JSON-dokumentet.
SET @doc = '{"a": 1, "b": 2, "c": {"d": 3}}'; SELECT JSON_CONTAINS_PATH(@doc, 'all', '$.c.d') AS Result;
Resultat:
+--------+ | Result | +--------+ | 1 | +--------+
Exempel 4 – Arrayer
Här är ett par array-exempel.
Det första exemplet ger ett positivt resultat.
SET @doc = '{"a": 1, "b": 2, "c": [3, 4, 5]}'; SELECT JSON_CONTAINS_PATH(@doc, 'all', '$.c[0]') AS Result;
Resultat:
+--------+ | Result | +--------+ | 1 | +--------+
Nästa exempel returnerar ett negativt resultat.
SET @doc = '{"a": 1, "b": 2, "c": [3, 4, 5]}'; SELECT JSON_CONTAINS_PATH(@doc, 'all', '$.c[3]') AS Result;
Resultat:
+--------+ | Result | +--------+ | 0 | +--------+
Detta returnerar negativt eftersom matriser använder nollbaserad numrering. Därför sökvägen $.c[3]
representerar det fjärde elementet, men arrayen innehåller bara tre element.