I MySQL er JSON_REMOVE()
funktionen fjerner data fra et JSON-dokument og returnerer resultatet.
Du angiver JSON-dokumentet som det første argument, efterfulgt af stien til at fjerne data fra. Du kan angive flere stier, hvis det kræves.
Syntaks
Syntaksen ser sådan ud:
JSON_REMOVE(json_doc, sti[, sti] ...)
Hvor json_doc
er JSON-dokumentet og path
er stien til at fjerne data fra.
path
argumenter vurderes fra venstre mod højre. Dokumentet, der produceres ved at evaluere én sti, bliver den nye værdi, som den næste sti evalueres i forhold til.
Det første argument skal være et gyldigt JSON-dokument, ellers opstår der en fejl.
Også path
argument skal være et gyldigt stiudtryk, og det må ikke være $
eller indeholder en *
eller **
jokertegn, ellers vil der opstå en fejl.
Eksempel 1 – Grundlæggende brug
Her er et eksempel til at demonstrere.
SELECT JSON_REMOVE('{"a":1, "b":2, "c":3}', '$.b') SOM 'Resultat';
Resultat:
+------------------------+| Resultat |+------------------------+| {"a":1, "c":3} |+------------------------+
I dette tilfælde fjernede vi nøgle/værdi-parret med nøglen b
. Dette skyldes, at vi har angivet $.b
som det andet argument.
Her er et andet eksempel:
SELECT JSON_REMOVE('{"Navn":"Homer", "Køn":"Mand", "Alder":39}', '$.Alder') SOM 'Resultat';
Resultat:
+--------------------------------------------+| Resultat |+---------------------------------------------+| {"Navn":"Homer", "Køn":"Mand"} |+-------------------------------------- ------+
Eksempel 2 – Ikke-eksisterende sti
Hvis du angiver en sti, der ikke eksisterer, fjernes intet. Det originale JSON-dokument returneres uden ændringer.
SELECT JSON_REMOVE('{"Navn":"Homer", "Alder":39}', '$.Køn') SOM 'Resultat';
Resultat:
+--------------------------------------+| Resultat |+-------------------------------------+| {"Alder":39, "Navn":"Homer"} |+------------------------------------+Eksempel 3 – Arrays
Her er et eksempel, hvor du bruger et array.
SELECT JSON_REMOVE('[1, 2, 3]', '$[0]') SOM 'Resultat';Resultat:
+--------+| Resultat |+--------+| [2, 3] |+--------+Arrays bruger nul-baseret nummerering, så i dette tilfælde fjernes det første element fra arrayet.
Her er et andet array-eksempel. Denne gang fjerner vi en værdi fra et indlejret array.
SELECT JSON_REMOVE('[1, 2, [3, 4, 5]]', '$[2][1]') SOM 'Resultat';Resultat:
+----------------+| Resultat |+----------------+| [1, 2, [3, 5]] |+----------------+Eksempel 4 – Flere stier
Du kan angive mere end én sti for at fjerne data fra flere steder i JSON-dokumentet.
Grundlæggende eksempel:
SELECT JSON_REMOVE('[1, 2, 3, 4, 5]', '$[1]', '$[3]') SOM 'Resultat';Resultat:
+------------+| Resultat |+-----------+| [1, 3, 4] |+------------+Som nævnt er
path
argumenter evalueres fra venstre mod højre, og dokumentet, der produceres ved at evaluere én sti, bliver den nye værdi, som den næste sti evalueres i forhold til.Derfor fjerner det 2. sti-argument i dette eksempel en anden værdi, end det ville have fjernet, hvis det havde været det eneste sti-argument. Hvis det havde været det eneste sti-argument, ville det have fjernet
4
.Her er hvad jeg mener:
SELECT JSON_REMOVE('[1, 2, 3, 4, 5]', '$[3]') SOM 'One Path', JSON_REMOVE('[1, 2, 3, 4, 5]', ' $[1]', '$[3]') SOM 'To stier';Resultat:
+--------------+-----------+| En vej | To veje |+--------------+-----------+| [1, 2, 3, 5] | [1, 3, 4] |+--------------+-----------+Så det kan du se, når vi bruger
$[3]
som den eneste sti fjerner den4
fra arrayet. Men når vi bruger det som 2. sti, fjerner det5
(og4
efterlades urørt).Et andet eksempel, denne gang sletning af værdier fra en matrix og en indlejret matrix:
SELECT JSON_REMOVE('[1, 2, [3, 4, 5]]', '$[0]', '$[1][1]') SOM 'Resultat';Resultat:
+-------------+| Resultat |+-------------+| [2, [3, 5]] |+-------------+Så igen, selvom arrayet er i position
2
i det originale dokument, den første stiværdi ($[0]
) hugger det ydre array ned, og det indre array skifter til position1
.Hvis dette får dit hoved til at snurre, kan du altid bytte sti-argumenterne rundt, så værdierne længst til højre fjernes først. På den måde vil det ikke påvirke placeringen af værdierne længst til venstre, og derfor kan du angive stierne baseret på det originale JSON-dokument.
Så vi kan ændre den forrige kode til følgende og få det samme resultat:
SELECT JSON_REMOVE('[1, 2, [3, 4, 5]]', '$[2][1]', '$[0]') SOM 'Resultat';Resultat:
+-------------+| Resultat |+-------------+| [2, [3, 5]] |+-------------+Eksempel 5 – Et større JSON-dokument
Her er et eksempel med et (lidt) større JSON-dokument.
SET @data ='{ "Person":{ "Navn":"Homer", "Alder":39, "Hobbyer":["Spise", "Sover", "Base Jumping"] } }'; SELECT JSON_REMOVE(@data, '$.Person.Age', '$.Person.Hobbies[2]') SOM 'Resultat';Resultat:
+------------------------------------------------------ --------------------+| Resultat |+------------------------------------------------------ ------------------+| {"Person":{"Navn":"Homer", "Hobbyer":["Spise", "Sover"]}} |+------------------------- -------------------------------------------------------+