I MySQL er JSON_EXTRACT()
funktion returnerer data fra et JSON-dokument. De faktiske returnerede data bestemmes af den sti, du angiver som argument.
Du angiver JSON-dokumentet som det første argument, efterfulgt af stien til de data, der skal returneres. Du kan også angive flere stier til at returnere data fra flere steder i dokumentet.
Syntaks
Syntaksen ser sådan ud:
JSON_EXTRACT(json_doc, path[, path] ...)
Hvor json_doc
er JSON-dokumentet og path
er stien til den værdi, der skal returneres.
Hvis det er muligt, at disse argumenter kan returnere flere værdier, pakkes de matchede værdier automatisk som et array i den rækkefølge, der svarer til stierne, der producerede dem.
Eksempel 1 – Grundlæggende brug
Her er et eksempel til at demonstrere.
SELECT JSON_EXTRACT('{"a": 1, "b": 2, "c": 3}', '$.b') AS 'Result';
Resultat:
+--------+ | Result | +--------+ | 2 | +--------+
I dette tilfælde returnerede vi værdien af nøglen b
.
Her er et andet eksempel:
SELECT JSON_EXTRACT('{"Name": "Bart", "Age": 10}', '$.Name') AS 'Result';
Resultat:
+--------+ | Result | +--------+ | "Bart" | +--------+
Eksempel 2 – Ikke-eksisterende sti
Hvis du angiver en sti, der ikke eksisterer, returneres en NULL-værdi.
SELECT JSON_EXTRACT('{"Name": "Homer", "Age": 39}', '$.Gender') AS 'Result';
Resultat:
+--------+ | Result | +--------+ | NULL | +--------+
Du får også en NULL-værdi, hvis nogle af argumenterne er NULL
.
Eksempel 3 – Arrays
Her er et eksempel, hvor du bruger et array.
SELECT JSON_EXTRACT('[1, 2, 3]', '$[2]') AS 'Result';
Resultat:
+--------+ | Result | +--------+ | 3 | +--------+
Arrays bruger nul-baseret nummerering, så i dette tilfælde erstattes det tredje element.
Her er et andet array-eksempel. Denne gang returnerer vi en værdi fra et indlejret array.
SELECT JSON_EXTRACT('[1, 2, [3, 4, 5]]', '$[2][1]') AS 'Result';
Resultat:
+--------+ | Result | +--------+ | 4 | +--------+
Eksempel 4 – Flere stier
Du kan angive mere end én sti for at returnere data fra flere steder i JSON-dokumentet.
Grundlæggende eksempel:
SELECT JSON_EXTRACT('[1, 2, 3, 4, 5]', '$[1]', '$[3]') AS 'Result';
Resultat:
+--------+ | Result | +--------+ | [2, 4] | +--------+
Eksempel 5 – Et større JSON-dokument
Her er et eksempel med et lidt større JSON-dokument.
SET @data = '{ "Person": { "Name": "Homer", "Age": 39, "Hobbies": ["Eating", "Sleeping"] } }'; SELECT JSON_EXTRACT(@data, '$.Person.Name', '$.Person.Age', '$.Person.Hobbies') AS 'Result';
Resultat:
+---------------------------------------+ | Result | +---------------------------------------+ | ["Homer", 39, ["Eating", "Sleeping"]] | +---------------------------------------+
Vi kan også vælge et specifikt element fra arrayet, hvis det er nødvendigt:
SET @data = '{ "Person": { "Name": "Homer", "Age": 39, "Hobbies": ["Eating", "Sleeping"] } }'; SELECT JSON_EXTRACT(@data, '$.Person.Name', '$.Person.Age', '$.Person.Hobbies[1]') AS 'Result';
Resultat:
+---------------------------+ | Result | +---------------------------+ | ["Homer", 39, "Sleeping"] | +---------------------------+