sql >> Database >  >> RDS >> Mysql

JSON_CONTAINS_PATH() Voorbeelden in MySQL

In MySQL is de JSON_CONTAINS_PATH() functie test of een gespecificeerd pad wordt gevonden in het gegeven JSON-document.

Als het pad is gevonden, JSON_CONTAINS_PATH() retourneert 1 , anders retourneert het 0 .

Syntaxis

De syntaxis gaat als volgt:

JSON_CONTAINS_PATH(json_doc, one_or_all, path[, path] ...)

Waar json_doc is het JSON-document, one_or_all is het sleutelwoord one of all (om aan te geven of er slechts één pad hoeft te bestaan ​​of dat alle paden moeten bestaan ​​voordat 1 wordt geretourneerd ), en path is het eigenlijke pad.

Voorbeeld 1 – Basisgebruik

Hier is een voorbeeld om het basisgebruik te demonstreren.

SET @doc = '{"a": 1, "b": 2, "c": {"d": 3}}';
SELECT JSON_CONTAINS_PATH(@doc, 'one', '$.a') AS Result;

Resultaat:

+--------+
| Result |
+--------+
|      1 |
+--------+

Het pad $.a bestaat in het JSON-document en daarom is het resultaat 1 . We gebruikten one als het tweede argument, maar in dit geval zouden we hetzelfde resultaat krijgen als we all hadden opgegeven .

SET @doc = '{"a": 1, "b": 2, "c": {"d": 3}}';
SELECT JSON_CONTAINS_PATH(@doc, 'all', '$.a') AS Result;

Resultaat:

+--------+
| Result |
+--------+
|      1 |
+--------+

Als we een pad specificeren dat niet bestaat, krijgen we 0 . Voorbeeld:

SET @doc = '{"a": 1, "b": 2, "c": {"d": 3}}';
SELECT JSON_CONTAINS_PATH(@doc, 'one', '$.z') AS Result;

Resultaat:

+--------+
| Result |
+--------+
|      0 |
+--------+

Voorbeeld 2 – Meerdere paden

In de volgende voorbeelden specificeren we twee paden.

In het eerste voorbeeld bestaat het ene pad, maar het andere niet. Maar omdat ik one . gebruik als het tweede argument is het resultaat positief (omdat ten minste één van de paden bestaat).

SET @doc = '{"a": 1, "b": 2, "c": {"d": 3}}';
SELECT JSON_CONTAINS_PATH(@doc, 'one', '$.a', '$.z') AS Result;

Resultaat:

+--------+
| Result |
+--------+
|      1 |
+--------+

Als we one verwisselen naar all we krijgen een negatief resultaat.

SET @doc = '{"a": 1, "b": 2, "c": {"d": 3}}';
SELECT JSON_CONTAINS_PATH(@doc, 'all', '$.a', '$.z') AS Result;

Resultaat:

+--------+
| Result |
+--------+
|      0 |
+--------+

Dit komt omdat de all trefwoord vereist dat alle paden in het JSON-document moeten bestaan ​​voordat het een 1 . retourneert .

Voorbeeld 3 – Puntnotatie

U kunt puntnotatie gebruiken om specifieke paden in het JSON-document aan te geven.

SET @doc = '{"a": 1, "b": 2, "c": {"d": 3}}';
SELECT JSON_CONTAINS_PATH(@doc, 'all', '$.c.d') AS Result;

Resultaat:

+--------+
| Result |
+--------+
|      1 |
+--------+

Voorbeeld 4 – Arrays

Hier zijn een paar voorbeelden van arrays.

Het eerste voorbeeld levert een positief resultaat op.

SET @doc = '{"a": 1, "b": 2, "c": [3, 4, 5]}';
SELECT JSON_CONTAINS_PATH(@doc, 'all', '$.c[0]') AS Result;

Resultaat:

+--------+
| Result |
+--------+
|      1 |
+--------+

Het volgende voorbeeld geeft een negatief resultaat.

SET @doc = '{"a": 1, "b": 2, "c": [3, 4, 5]}';
SELECT JSON_CONTAINS_PATH(@doc, 'all', '$.c[3]') AS Result;

Resultaat:

+--------+
| Result |
+--------+
|      0 |
+--------+

Dit retourneert negatief omdat arrays op nul gebaseerde nummering gebruiken. Daarom is het pad $.c[3] vertegenwoordigt het vierde element, maar de array bevat slechts drie elementen.


  1. Datums vergelijken die zijn opgeslagen als varchar

  2. Gegevens invoegen en externe sleutels instellen met Postgres

  3. Hoe maak en vul je een tabel in een enkele stap als onderdeel van een CSV-importbewerking?

  4. Bestanden in een map weergeven met SQL Server