JSON_SET() în MySQL

JSON: modificare MySQL 5.7.8+

Setează valori în JSON: le înlocuiește dacă există și le adaugă dacă lipsesc.

Sintaxă
JSON_SET(document, cale, valoare[, cale, valoare] ...)

Ce face JSON_SET()

JSON_SET() este funcția de modificare folosită cel mai des. Pentru fiecare pereche cale-valoare: dacă există, înlocuiește; dacă nu există, adaugă.

Variantele stricte: JSON_INSERT() doar adaugă, JSON_REPLACE() doar înlocuiește.

Parametri

Parametru Descriere
document Documentul modificat.
cale, valoare Perechi de cale și valoare nouă.

Ce returnează

Documentul nou.

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: Actualizarea unui profil

UPDATE profiluri
SET date = JSON_SET(date, '$.varsta', 32, '$.email', 'ana@exemplu.ro')
WHERE id = 1;

SELECT date->>'$.varsta' AS varsta, date->>'$.email' AS email FROM profiluri WHERE id = 1;

Rezultat

+--------+----------------+
| varsta | email          |
+--------+----------------+
| 32     | ana@exemplu.ro |
+--------+----------------+

Greșeli frecvente

  • Uiți să salvezi rezultatul. JSON_SET() nu modifică tabelul; returnează documentul nou, pe care îl scrii cu UPDATE ... SET col = JSON_SET(col, ...).

Comenzi înrudite

  • JSON_INSERT(): Adaugă valori în JSON doar unde cheile nu există; valorile existente rămân neschimbate.
  • JSON_REPLACE(): Înlocuiește doar valorile care există deja în JSON; căile inexistente sunt ignorate.
  • JSON_REMOVE(): Șterge chei sau elemente dintr-un document JSON.