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.