Ce face JSON_EXTRACT()
JSON_EXTRACT() extrage valori folosind căi JSON: $ este documentul, .cheie intră într-un obiect, [0] într-o listă, iar [*] ia toate elementele.
Rezultatul este tot JSON: textele rămân între ghilimele. Pentru text simplu folosește JSON_UNQUOTE() sau operatorul ->>.
Parametri
| Parametru | Descriere |
|---|---|
document |
Documentul JSON. |
cale |
Una sau mai multe căi. Cu mai multe căi, rezultatul este o listă. |
Ce returnează
Valoarea găsită (JSON) sau NULL.
Exemple
Exemplele de pe această pagină pornesc de la datele de mai jos. Rulează mai întâi acest cod, apoi exemplul.
CREATE TABLE profiluri (
id INT PRIMARY KEY,
date JSON
);
INSERT INTO profiluri VALUES
(1, '{"nume": "Ana", "oras": "Iași", "varsta": 31, "hobby": ["citit", "înot"], "adresa": {"strada": "Lăpușneanu", "nr": 12}}'),
(2, '{"nume": "Dan", "oras": "Cluj", "varsta": 45, "hobby": ["ciclism"]}'),
(3, '{"nume": "Ioana", "oras": "Iași", "varsta": 27, "hobby": []}');
Exemplul 1: Chei, liste și obiecte imbricate
SELECT id,
JSON_EXTRACT(date, '$.nume') AS nume,
JSON_EXTRACT(date, '$.hobby[0]') AS primul_hobby,
JSON_EXTRACT(date, '$.adresa.strada') AS strada
FROM profiluri
ORDER BY id;
Rezultat
+----+---------+--------------+----------------+
| id | nume | primul_hobby | strada |
+----+---------+--------------+----------------+
| 1 | "Ana" | "citit" | "Lăpușneanu" |
| 2 | "Dan" | "ciclism" | NULL |
| 3 | "Ioana" | NULL | NULL |
+----+---------+--------------+----------------+
Exemplul 2: Toate elementele unei liste
SELECT JSON_EXTRACT(date, '$.hobby[*]') AS hobby FROM profiluri WHERE id = 1;
Rezultat
+--------------------+
| hobby |
+--------------------+
| ["citit", "înot"] |
+--------------------+
Greșeli frecvente
- Compari rezultatul cu un text simplu:
JSON_EXTRACT(date, '$.oras') = 'Iași'. Funcționează, dar e mai clar și mai sigur cudate->>'$.oras' = 'Iași'.
Comenzi înrudite
Operatorii -> și ->>: Prescurtări pentru citirea din coloane JSON: -> dă JSON, ->> dă text simplu.JSON_UNQUOTE(): Elimină ghilimelele unui șir JSON și transformă secvențele \n, \” în caractere normale.JSON_VALUE(): Extrage o valoare simplă din JSON și o convertește direct în tipul dorit (număr, dată, text).