JSON_EXTRACT() în MySQL

Citește o valoare dintr-un document JSON după o cale ca '$.adresa.strada'.

Sintaxă
JSON_EXTRACT(document, cale[, cale] ...)

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 cu date->>'$.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).