Vai al contenuto
eLearner.app
Modulo 15 · Lezione 1 di 256/57 nel corso~15 min
Lezioni del modulo (1/2)

Integrazione JSON e JSONB

Integrazione JSON e JSONB

PostgreSQL ha riscritto le regole dei database unendo la rassicurante e colossale natura ACID dell'SQL con la flessibilità dinamica e fluttuante tipica del NoSQL. E l'ha fatto offrendo le colonne nativamente dedicate a salvare dati JSON.

Attenzione: in postgres si consiglia di usare quasi sempre JSONB. "B" sta per Binary: i documenti JSON inseriti in queste colonne perdono la loro formattazione puramente testuale, ma ne guadagnano che possono essere validati, interrogati ad altissime prestazioni, manipolati e addirittura indicizzati con i classici INDEX B-tree o GIN.

Navigare nel JSON: l'operatore "Freccia"

Purtroppo il db `ecommerce` al momento non ha colonne JSON pure predefinite. Possiamo però creare JSON temporanei e "castarli" testualmente!

Quando si lavora con JSON, gli operatori che scendono negli oggetti e array sono -> (mantiene il dato come forma pura jsonb/json) o la sua versione "estesa" ->> (converte il dato json incontrato testualmente).

Esempio accademico se ci fosse una colonna "metadata" JSON:

SQL
-- Cerca il valore associato alla chiave info
SELECT metadata->'info' FROM users;

-- Cerca dentro info, e prendi testuale city
SELECT metadata->'info'->>'city' FROM users;
Esercizio#sql.m15.l1.e1
Tentativi: 0Caricamento…

Interroghiamo JSON on the fly. Proietta questo literal json `'{"user": {"name": "Mario"}}'::json` ed usa l'operatore `->` associato testualmente (`->>`) per estrarne il 'name', chiamando la colonna estratta 'user_name'.

Caricamento editor…
Mostra suggerimento

Cast a ::json o ::jsonb, e usa ->'user'->>'name'.

Soluzione disponibile dopo 3 tentativi

Esercizio#sql.m15.l1.e2
Tentativi: 0Caricamento…

Se passiamo un array? L'accesso ad un array in json_b in postgres avviene per INDICE (base 0). Estrai testualmente il SECONDO elemento da `'["A", "B", "C"]'::json` e chiamalo 'letter'.

Caricamento editor…
Mostra suggerimento

->>1 (è a base zero!)

Soluzione disponibile dopo 3 tentativi