V MySQL je to JSON_EXTRACT()
Funkce vrací data z dokumentu JSON. Skutečná vrácená data jsou určena cestou, kterou zadáte jako argument.
Jako první argument zadáte dokument JSON, za nímž následuje cesta dat, která se mají vrátit. Můžete také zadat více cest pro vrácení dat z více míst v dokumentu.
Syntaxe
Syntaxe vypadá takto:
JSON_EXTRACT(json_doc, path[, path] ...)
Kde json_doc
je dokument JSON a path
je cesta k hodnotě, která se má vrátit.
Pokud je možné, že tyto argumenty mohou vracet více hodnot, odpovídající hodnoty se automaticky zabalí do pole v pořadí odpovídajícím cestám, které je vytvořily.
Příklad 1 – Základní použití
Zde je příklad k demonstraci.
SELECT JSON_EXTRACT('{"a": 1, "b": 2, "c": 3}', '$.b') AS 'Result';
Výsledek:
+--------+ | Result | +--------+ | 2 | +--------+
V tomto případě jsme vrátili hodnotu klíče b
.
Zde je další příklad:
SELECT JSON_EXTRACT('{"Name": "Bart", "Age": 10}', '$.Name') AS 'Result';
Výsledek:
+--------+ | Result | +--------+ | "Bart" | +--------+
Příklad 2 – Neexistující cesta
Pokud zadáte cestu, která neexistuje, vrátí se hodnota NULL.
SELECT JSON_EXTRACT('{"Name": "Homer", "Age": 39}', '$.Gender') AS 'Result';
Výsledek:
+--------+ | Result | +--------+ | NULL | +--------+
Pokud je některý z argumentů NULL
, získáte také hodnotu NULL .
Příklad 3 – Pole
Zde je příklad použití pole.
SELECT JSON_EXTRACT('[1, 2, 3]', '$[2]') AS 'Result';
Výsledek:
+--------+ | Result | +--------+ | 3 | +--------+
Pole používají číslování založené na nule, takže v tomto případě je třetí prvek nahrazen.
Zde je další příklad pole. Tentokrát vrátíme hodnotu z vnořeného pole.
SELECT JSON_EXTRACT('[1, 2, [3, 4, 5]]', '$[2][1]') AS 'Result';
Výsledek:
+--------+ | Result | +--------+ | 4 | +--------+
Příklad 4 – Více cest
Chcete-li vrátit data z více míst v dokumentu JSON, můžete zadat více než jednu cestu.
Základní příklad:
SELECT JSON_EXTRACT('[1, 2, 3, 4, 5]', '$[1]', '$[3]') AS 'Result';
Výsledek:
+--------+ | Result | +--------+ | [2, 4] | +--------+
Příklad 5 – Větší dokument JSON
Zde je příklad s o něco větším dokumentem JSON.
SET @data = '{ "Person": { "Name": "Homer", "Age": 39, "Hobbies": ["Eating", "Sleeping"] } }'; SELECT JSON_EXTRACT(@data, '$.Person.Name', '$.Person.Age', '$.Person.Hobbies') AS 'Result';
Výsledek:
+---------------------------------------+ | Result | +---------------------------------------+ | ["Homer", 39, ["Eating", "Sleeping"]] | +---------------------------------------+
V případě potřeby můžeme také vybrat konkrétní prvek z pole:
SET @data = '{ "Person": { "Name": "Homer", "Age": 39, "Hobbies": ["Eating", "Sleeping"] } }'; SELECT JSON_EXTRACT(@data, '$.Person.Name', '$.Person.Age', '$.Person.Hobbies[1]') AS 'Result';
Výsledek:
+---------------------------+ | Result | +---------------------------+ | ["Homer", 39, "Sleeping"] | +---------------------------+