В MySQL, JSON_EXTRACT()
функцията връща данни от JSON документ. Действително върнатите данни се определят от пътя, който предоставяте като аргумент.
Предоставяте документа JSON като първи аргумент, последван от пътя на данните за връщане. Можете също да предоставите множество пътища за връщане на данни от множество места в документа.
Синтаксис
Синтаксисът е така:
JSON_EXTRACT(json_doc, path[, path] ...)
Където json_doc
е JSON документът и path
е пътят към стойността за връщане.
Ако е възможно тези аргументи да връщат множество стойности, съвпадащите стойности се обвиват автоматично като масив в реда, съответстващ на пътищата, които ги създават.
Пример 1 – Основна употреба
Ето пример за демонстрация.
SELECT JSON_EXTRACT('{"a": 1, "b": 2, "c": 3}', '$.b') AS 'Result';
Резултат:
+--------+ | Result | +--------+ | 2 | +--------+
В този случай върнахме стойността на ключа b
.
Ето още един пример:
SELECT JSON_EXTRACT('{"Name": "Bart", "Age": 10}', '$.Name') AS 'Result';
Резултат:
+--------+ | Result | +--------+ | "Bart" | +--------+
Пример 2 – Несъществуващ път
Ако посочите път, който не съществува, се връща стойност NULL.
SELECT JSON_EXTRACT('{"Name": "Homer", "Age": 39}', '$.Gender') AS 'Result';
Резултат:
+--------+ | Result | +--------+ | NULL | +--------+
Освен това ще получите стойност NULL, ако някой от аргументите е NULL
.
Пример 3 – Масиви
Ето пример за използване на масив.
SELECT JSON_EXTRACT('[1, 2, 3]', '$[2]') AS 'Result';
Резултат:
+--------+ | Result | +--------+ | 3 | +--------+
Масивите използват номериране на базата на нула, така че в този случай третият елемент се заменя.
Ето още един пример за масив. Този път връщаме стойност от вложен масив.
SELECT JSON_EXTRACT('[1, 2, [3, 4, 5]]', '$[2][1]') AS 'Result';
Резултат:
+--------+ | Result | +--------+ | 4 | +--------+
Пример 4 – Множество пътища
Можете да посочите повече от един път, за да върнете данни от множество места в JSON документа.
Основен пример:
SELECT JSON_EXTRACT('[1, 2, 3, 4, 5]', '$[1]', '$[3]') AS 'Result';
Резултат:
+--------+ | Result | +--------+ | [2, 4] | +--------+
Пример 5 – По-голям JSON документ
Ето пример с малко по-голям JSON документ.
SET @data = '{ "Person": { "Name": "Homer", "Age": 39, "Hobbies": ["Eating", "Sleeping"] } }'; SELECT JSON_EXTRACT(@data, '$.Person.Name', '$.Person.Age', '$.Person.Hobbies') AS 'Result';
Резултат:
+---------------------------------------+ | Result | +---------------------------------------+ | ["Homer", 39, ["Eating", "Sleeping"]] | +---------------------------------------+
Можем също да изберем конкретен елемент от масива, ако е необходимо:
SET @data = '{ "Person": { "Name": "Homer", "Age": 39, "Hobbies": ["Eating", "Sleeping"] } }'; SELECT JSON_EXTRACT(@data, '$.Person.Name', '$.Person.Age', '$.Person.Hobbies[1]') AS 'Result';
Резултат:
+---------------------------+ | Result | +---------------------------+ | ["Homer", 39, "Sleeping"] | +---------------------------+