# Come usare JSON in MariaDB

A partire dalla versione 10.2, è possibile utilizzare JSON in MariaDB come tipo di dato per salvare e gestire direttamente in tabelle relazionali contenuti flessibili e semi-strutturati. In questa guida ti presentiamo le funzioni principali e i passaggi fondamentali.

## Panoramica delle funzioni JSON in MariaDB

[MariaDB](https://www.ionos.it/digitalguide/server/know-how/cose-mariadb/) mette a disposizione diverse funzioni utili per lavorare in modo efficiente con i **dati di JSON**, direttamente nel database. Non serve una banca dati NoSQL separata: con queste funzioni puoi accedere ai dati, modificarli o verificarli direttamente. Con i seguenti strumenti è possibile accedere in modo mirato alle informazioni, modificare i contenuti o verificare i [dati strutturati](https://www.ionos.it/digitalguide/siti-web/creare-siti/unintroduzione-ai-dati-strutturati/):

- **`JSON_VALUE(json_doc, json_path)`:** consente di estrarre un valore specifico da un campo JSON, indicandone il percorso. MariaDB restituisce solo il valore richiesto, senza bisogno di analizzare tutto il documento o usare parser esterni.
- **`JSON_SET(json_doc, path, value)`:** modifica un campo esistente oppure ne aggiunge uno nuovo. Se il percorso esiste, il valore viene aggiornato; se manca, viene creato.
- **`JSON_REMOVE(json_doc, path)`:** consente di rimuovere elementi inutili o obsoleti da un oggetto JSON specificando il percorso da eliminare.
- **`JSON_CONTAINS(json_doc, value, path)`:** utile per verifiche e filtri, consente di controllare se un valore specifico è presente nel documento JSON.
- **`JSON_VALID(json_doc)`:** prima di elaborare il contenuto JSON, è necessario assicurarsi che sia valido. Con `JSON_VALID`, MariaDB verifica se il testo JSON è strutturato correttamente e segnala tempestivamente eventuali errori.

## Come usare JSON in MariaDB: guida completa

Qui ti spieghiamo come inserire, leggere e modificare dati JSON in MariaDB.

### Primo passaggio: creare una tabella con campo JSON

Per prima cosa, crea una tabella con una colonna di tipo `LONGTEXT` o `JSON`. Internamente, MariaDB salva i JSON come testo, ma ne verifica automaticamente la sintassi quando si usano le apposite **funzioni JSON**.

```sql
CREATE TABLE products (
    id INT AUTO_INCREMENT PRIMARY KEY,
    name VARCHAR(255),
    properties JSON
);
```

Il campo `properties` può contenere **oggetti JSON** di qualsiasi tipo.

### Secondo passaggio: inserire i dati di JSON

Con [MariaDB INSERT INTO](https://www.ionos.it/digitalguide/hosting/tecniche-hosting/mariadb-insert-into/) puoi aggiungere un record con JSON valido:

```sql
INSERT INTO products (name, properties) VALUES (
    'desk',
    '{"color": "brown", "material": "timber", "weight": 12.5}'
);
```

Attenzione: assicurati che la **stringa JSON** sia formattata correttamente. Deve essere racchiusa tra virgolette e al suo interno le virgolette doppie devono essere precedute da un backslash (`\"`).

### Terzo passaggio: leggere dati da una colonna JSON

Per estrarre valori specifici da un oggetto JSON, utilizza `JSON_VALUE()`:

```sql
SELECT name, JSON_VALUE(properties, '$.material') AS material
FROM products;
```

Il risultato mostra il nome del prodotto e il materiale salvato dal campo JSON.

N.B. `JSON_VALUE()` è disponibile a partire dalla versione 10.6.1 di MariaDB. Per versioni precedenti, utilizza `JSON_UNQUOTE(JSON_EXTRACT(...))`.

### Quarto passaggio: aggiornare i dati di JSON

Per modificare il contenuto di un campo JSON usa `JSON_SET()`:

```sql
UPDATE products
SET properties = JSON_SET(properties, '$.color', 'white')
WHERE name = 'desk';
```

Puoi anche aggiungere nuove coppie chiave-valore non esistenti in precedenza.

### Quinto passaggio: rimuovere elementi da JSON

Con `JSON_REMOVE()` elimini un valore specifico da un oggetto:

```sql
UPDATE products
SET properties = JSON_REMOVE(properties, '$.weight')
WHERE name = 'desk';
```

### Sesto passaggio: cercare valori in JSON

In MariaDB è possibile filtrare le voci con determinati contenuti JSON:

```sql
SELECT * FROM products
WHERE JSON_VALUE(properties, '$.material') = 'timber';
```

Questo è utile, ad esempio, per filtri avanzati nelle ricerche prodotto o nelle personalizzazioni.

### Settimo passaggio: validazione e debugging

Per verificare se un campo contiene un JSON valido, usa `JSON_VALID()`:

```sql
SELECT name, JSON_VALID(properties) FROM products;
```

Un valore restituito pari a “1” indica che JSON è valido, “0” segnala un errore di sintassi.

### Ottavo passaggio: combinare colonne JSON con colonne e indici generati

Poiché MariaDB memorizza i JSON come testo, ogni query deve effettuare l’analisi (o l’elaborazione) del contenuto JSON. Questo può rallentare le prestazioni, soprattutto su tabelle grandi o query ripetute. Per evitare che ciò accada, puoi creare **colonne generate** che estraggono automaticamente i valori più usati e li memorizzano separatamente, con la possibilità di indicizzarli.

Ad esempio, è possibile estrarre il valore della chiave `material` dalla colonna JSON `properties` e salvarlo in una nuova colonna indicizzabile:

```sql
ALTER TABLE products
ADD COLUMN material VARCHAR(100) AS (JSON_VALUE(properties, '$.material')) STORED,
ADD INDEX idx_material (material);
```

Questo comando crea la colonna `material`, che riprende il valore JSON da `$.material`. La parola chiave `STORED` assicura che il valore venga salvato nel database e non solo calcolato durante l’esecuzione. Inoltre, l’indice (`idx_material`) permette di gestire ricerche precise in maniera efficiente.

Per questo motivo le interrogazioni sono molto più rapide:

```sql
SELECT name FROM products WHERE material = 'timber';
```

In ambienti produttivi con molte letture, questo approccio garantisce migliori prestazioni e tempi di risposta più brevi.

## Perché usare JSON in MariaDB?

L’impiego di [JSON](https://www.ionos.it/digitalguide/server/know-how/cose-json/) risulta particolarmente utile per la gestione di **strutture di dati flessibili**, come configurazioni, risposte API, profili utente o log. JSON conserva contenuti annidati e flessibili direttamente in una colonna, anziché creare colonne aggiuntive per ogni campo possibile. Inoltre, consente di aggiungere nuovi valori direttamente nella struttura JSON. In questo modo è possibile adattare i dati senza modificare lo schema del database.

Soprattutto nei sistemi che richiedono sia strutture di tabella rigide sia una gestione flessibile dei dati, JSON in MariaDB rappresenta una soluzione rapida e semplice. Permette di lavorare con contenuti dinamici senza rinunciare ai vantaggi delle **query SQL** tradizionali, unendo così la stabilità dei dati relazionali con la flessibilità dei database NoSQL.


This is a markdown version of: [https://www.ionos.it/digitalguide/hosting/tecniche-hosting/json-in-mariadb/](https://www.ionos.it/digitalguide/hosting/tecniche-hosting/json-in-mariadb/) for AI/LLM consumption.