I MySQL, JSON_CONTAINS()
funktion testar huruvida ett angivet värde finns i det givna JSON-dokumentet eller, valfritt, vid den angivna sökvägen i dokumentet.
Om värdet hittas, JSON_CONTAINS()
returnerar 1
, annars returnerar den 0
.
Syntax
Syntaxen ser ut så här:
JSON_CONTAINS(target, candidate[, path])
Funktionen returnerar 1
eller 0
beroende på om en given candidate
JSON-dokumentet finns i ett target
JSON-dokument, eller – om en path
argumentet tillhandahölls – om kandidaten finns på en specifik väg inom målet.
Exempel 1 – Två argument
Här är ett exempel för att demonstrera grundläggande användning utan att ange en sökväg (dvs. tillhandahåller endast två argument).
SET @doc1 = '{"a": 1, "b": 2, "c": {"d": 3}}'; SET @doc2 = '{"c": {"d": 3}}'; SELECT JSON_CONTAINS(@doc1, @doc2) AS Result;
Resultat:
+--------+ | Result | +--------+ | 1 | +--------+
Notera de lockiga klammerparenteserna runt det andra argumentet. Dessa krävs för att göra den giltig JSON. Om vi utelämnar de lockiga hängslen, kommer vi att få ett felmeddelande:
SET @doc1 = '{"a": 1, "b": 2, "c": {"d": 3}}'; SET @doc2 = '"c": {"d": 3}'; SELECT JSON_CONTAINS(@doc1, @doc2) AS Result;
Resultat:
ERROR 3141 (22032): Invalid JSON text in argument 2 to function json_contains: "The document root must not be followed by other values." at position 3.
Exempel 2 – Tre argument
I det här exemplet lägger jag till ett tredje argument, för att indikera en specifik sökväg för att hitta det andra argumentet i det första argumentet.
SET @doc1 = '{"a": 1, "b": 2, "c": {"d": 3}}'; SET @doc2 = '1'; SELECT JSON_CONTAINS(@doc1, @doc2, '$.a') AS Result;
Resultat:
+--------+ | Result | +--------+ | 1 | +--------+
I det här fallet hittades det andra argumentet i det första argumentet på den sökväg som anges av det tredje argumentet.
Om den inte hittades skulle vi sluta med detta:
SET @doc1 = '{"a": 1, "b": 2, "c": {"d": 3}}'; SET @doc2 = '2'; SELECT JSON_CONTAINS(@doc1, @doc2, '$.a') AS Result;
Resultat:
+--------+ | Result | +--------+ | 0 | +--------+
Exempel 3 – Punktnotation
Du kan använda punktnotation för att indikera specifika sökvägar i JSON-dokumentet.
SET @doc1 = '{"a": 1, "b": 2, "c": {"d": 3}}'; SET @doc2 = '3'; SELECT JSON_CONTAINS(@doc1, @doc2, '$.c.d') AS Result;
Resultat:
+--------+ | Result | +--------+ | 1 | +--------+