I MySQL, JSON_EXTRACT()
funktion returnerar data från ett JSON-dokument. Den faktiska data som returneras bestäms av sökvägen du anger som argument.
Du tillhandahåller JSON-dokumentet som det första argumentet, följt av sökvägen till data som ska returneras. Du kan också tillhandahålla flera sökvägar för att returnera data från flera ställen i dokumentet.
Syntax
Syntaxen ser ut så här:
JSON_EXTRACT(json_doc, path[, path] ...)
Där json_doc
är JSON-dokumentet och path
är sökvägen till värdet som ska returneras.
Om det är möjligt att dessa argument kan returnera flera värden, raderas de matchade värdena automatiskt som en array, i den ordning som motsvarar sökvägarna som producerade dem.
Exempel 1 – Grundläggande användning
Här är ett exempel att visa.
SELECT JSON_EXTRACT('{"a": 1, "b": 2, "c": 3}', '$.b') AS 'Result';
Resultat:
+--------+ | Result | +--------+ | 2 | +--------+
I det här fallet returnerade vi värdet för nyckeln b
.
Här är ett annat exempel:
SELECT JSON_EXTRACT('{"Name": "Bart", "Age": 10}', '$.Name') AS 'Result';
Resultat:
+--------+ | Result | +--------+ | "Bart" | +--------+
Exempel 2 – Icke-existerande sökväg
Om du anger en sökväg som inte finns returneras ett NULL-värde.
SELECT JSON_EXTRACT('{"Name": "Homer", "Age": 39}', '$.Gender') AS 'Result';
Resultat:
+--------+ | Result | +--------+ | NULL | +--------+
Du får också ett NULL-värde om något av argumenten är NULL
.
Exempel 3 – Arrayer
Här är ett exempel som använder en array.
SELECT JSON_EXTRACT('[1, 2, 3]', '$[2]') AS 'Result';
Resultat:
+--------+ | Result | +--------+ | 3 | +--------+
Matriser använder nollbaserad numrering, så i det här fallet ersätts det tredje elementet.
Här är ett annat exempel på array. Den här gången returnerar vi ett värde från en kapslad array.
SELECT JSON_EXTRACT('[1, 2, [3, 4, 5]]', '$[2][1]') AS 'Result';
Resultat:
+--------+ | Result | +--------+ | 4 | +--------+
Exempel 4 – Flera sökvägar
Du kan ange mer än en sökväg för att returnera data från flera platser i JSON-dokumentet.
Grundläggande exempel:
SELECT JSON_EXTRACT('[1, 2, 3, 4, 5]', '$[1]', '$[3]') AS 'Result';
Resultat:
+--------+ | Result | +--------+ | [2, 4] | +--------+
Exempel 5 – Ett större JSON-dokument
Här är ett exempel med ett lite 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 också välja ett specifikt element från arrayen om det behövs:
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"] | +---------------------------+