I MySQL er JSON_CONTAINS_PATH()
funktion tester, om der findes en specificeret sti i det givne JSON-dokument.
Hvis stien findes, JSON_CONTAINS_PATH()
returnerer 1
, ellers returnerer den 0
.
Syntaks
Syntaksen ser sådan ud:
JSON_CONTAINS_PATH(json_doc, one_or_all, path[, path] ...)
Hvor json_doc
er JSON-dokumentet, one_or_all
er søgeordet one
eller all
(for at angive, om der kun skal eksistere én sti, eller alle stier skal eksistere, før 1
returneres ), og path
er den faktiske vej.
Eksempel 1 – Grundlæggende brug
Her er et eksempel til at demonstrere grundlæggende brug.
SET @doc = '{"a": 1, "b": 2, "c": {"d": 3}}'; SELECT JSON_CONTAINS_PATH(@doc, 'one', '$.a') AS Result;
Resultat:
+--------+ | Result | +--------+ | 1 | +--------+
Stien $.a
findes i JSON-dokumentet, og derfor er resultatet 1
. Vi brugte one
som det andet argument, men i dette tilfælde ville vi få det samme resultat, hvis vi havde angivet all
.
SET @doc = '{"a": 1, "b": 2, "c": {"d": 3}}'; SELECT JSON_CONTAINS_PATH(@doc, 'all', '$.a') AS Result;
Resultat:
+--------+ | Result | +--------+ | 1 | +--------+
Hvis vi angiver en sti, der ikke eksisterer, får vi 0
. Eksempel:
SET @doc = '{"a": 1, "b": 2, "c": {"d": 3}}'; SELECT JSON_CONTAINS_PATH(@doc, 'one', '$.z') AS Result;
Resultat:
+--------+ | Result | +--------+ | 0 | +--------+
Eksempel 2 – Flere stier
I de følgende eksempler angiver vi to stier.
I det første eksempel eksisterer den ene vej, men den anden gør det ikke. Men fordi jeg bruger one
som det andet argument er resultatet positivt (fordi mindst én af stierne findes).
SET @doc = '{"a": 1, "b": 2, "c": {"d": 3}}'; SELECT JSON_CONTAINS_PATH(@doc, 'one', '$.a', '$.z') AS Result;
Resultat:
+--------+ | Result | +--------+ | 1 | +--------+
Hvis vi skifter one
til all
vi får et negativt resultat.
SET @doc = '{"a": 1, "b": 2, "c": {"d": 3}}'; SELECT JSON_CONTAINS_PATH(@doc, 'all', '$.a', '$.z') AS Result;
Resultat:
+--------+ | Result | +--------+ | 0 | +--------+
Dette skyldes, at all
nøgleordet kræver, at alle stier skal eksistere i JSON-dokumentet, før det returnerer en 1
.
Eksempel 3 – Punktnotation
Du kan bruge punktnotation til at angive specifikke stier 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 | +--------+
Eksempel 4 – Arrays
Her er et par array-eksempler.
Det første eksempel giver et 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 | +--------+
Det næste eksempel returnerer et 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 | +--------+
Dette returnerer negativt, fordi arrays bruger nul baseret nummerering. Derfor er stien $.c[3]
repræsenterer det fjerde element, men arrayet indeholder kun tre elementer.