Operatorii -> și ->> în MySQL

JSON: creare și citire MySQL 5.7.9+ (->>: 5.7.13+)

Prescurtări pentru citirea din coloane JSON: -> dă JSON, ->> dă text simplu.

Sintaxă
coloana->'$.cale'
coloana->>'$.cale'

Ce face Operatorii -> și ->>

coloana->'$.cale' este prescurtarea pentru JSON_EXTRACT(coloana, '$.cale'). Rezultatul păstrează ghilimelele textelor.

coloana->>'$.cale' este prescurtarea pentru JSON_UNQUOTE(JSON_EXTRACT(...)) și dă text simplu, potrivit pentru afișare, comparații și sortare. Operatorii funcționează doar cu o coloană în stânga, nu cu orice expresie.

Parametri

Parametru Descriere
cale Calea JSON, ex. '$.adresa.nr'.

Ce returnează

Valoarea JSON (->) sau textul ei (->>).

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: Diferența dintre -> și ->>

SELECT id, date->'$.oras' AS cu_ghilimele, date->>'$.oras' AS text_simplu
FROM profiluri
ORDER BY id;

Rezultat

+----+--------------+-------------+
| id | cu_ghilimele | text_simplu |
+----+--------------+-------------+
|  1 | "Iași"       | Iași        |
|  2 | "Cluj"       | Cluj        |
|  3 | "Iași"       | Iași        |
+----+--------------+-------------+

Exemplul 2: Filtrare și sortare după câmpuri JSON

SELECT date->>'$.nume' AS nume, date->>'$.varsta' AS varsta
FROM profiluri
WHERE date->>'$.oras' = 'Iași'
ORDER BY CAST(date->>'$.varsta' AS UNSIGNED);

Rezultat

+-------+--------+
| nume  | varsta |
+-------+--------+
| Ioana | 27     |
| Ana   | 31     |
+-------+--------+

Greșeli frecvente

  • Sortezi după date->>'$.varsta' fără conversie. Rezultatul este text, deci „100” vine înainte de „27”. Convertește cu CAST(... AS UNSIGNED).

Comenzi înrudite

  • JSON_EXTRACT(): Citește o valoare dintr-un document JSON după o cale ca ‘$.adresa.strada’.
  • 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).