Dopo aver compreso cos'è JSON e come si struttura, vediamo come utilizzarlo in PHP per salvare, leggere e convertire dati. PHP fornisce due funzioni principali per lavorare con il formato JSON:
- json_encode() → converte un array o un oggetto PHP in una stringa JSON
- json_decode() → converte una stringa JSON in un array o oggetto PHP
Da PHP a JSON: json_encode()
La funzione json_encode() trasforma un array PHP in una stringa JSON. È utile quando vogliamo inviare dati dal server al browser o salvarli in un file.
<?php
$studente = [
"nome" => "Luca",
"eta" => 17,
"classe" => "4B INF",
"materie" => ["Informatica", "TPSIT", "Sistemi"]
];
$json = json_encode($studente);
echo $json;
?>
Output:
{"nome":"Luca","eta":17,"classe":"4B INF","materie":["Informatica","TPSIT","Sistemi"]}
Salvare JSON su file
Possiamo salvare i dati in un file con estensione .json per riutilizzarli successivamente.
<?php
$studenti = [
["nome" => "Anna", "eta" => 18],
["nome" => "Marco", "eta" => 17],
["nome" => "Sara", "eta" => 16]
];
$json = json_encode($studenti, JSON_PRETTY_PRINT);
file_put_contents("studenti.json", $json);
echo "File JSON creato con successo!";
?>
Nel file studenti.json troverai:
[
{
"nome": "Anna",
"eta": 18
},
{
"nome": "Marco",
"eta": 17
},
{
"nome": "Sara",
"eta": 16
}
]
Da JSON a PHP: json_decode()
Quando vogliamo leggere dati da un file JSON, possiamo usare file_get_contents() per caricare il file e json_decode() per trasformarlo in un array PHP.
<?php
$json = file_get_contents("studenti.json");
$studenti = json_decode($json, true); // true = array associativo
foreach ($studenti as $studente) {
echo $studente["nome"] . " ha " . $studente["eta"] . " anni.<br>";
}
?>
Output:
Anna ha 18 anni.
Marco ha 17 anni.
Sara ha 16 anni.
Controllare errori nel JSON
Se il JSON è malformato o non valido, json_decode() restituisce null.
Possiamo scoprire l'errore con json_last_error_msg().
<?php
$json = "{ 'nome': 'Luca' }"; // Errore: virgolette errate
$risultato = json_decode($json);
if ($risultato === null) {
echo "Errore nel JSON: " . json_last_error_msg();
}
?>
Nota: in JSON le stringhe devono sempre essere tra virgolette doppie (").
Nella prossima sezione metti in pratica tutto ciò che hai imparato con un laboratorio realistico.
LABORATORIO
Archivio digitale di libri in formato JSON
In questo laboratorio imparerai a creare un piccolo archivio digitale di libri utilizzando file JSON e PHP. L'applicazione permetterà di leggere, aggiungere e visualizzare libri senza usare un database, ma solo un file JSON.
- Uso combinato di json_encode() e json_decode() in PHP.
- Lettura e scrittura di file JSON con file_get_contents() e file_put_contents().
- Gestione di un archivio di dati realistico (libri) senza database.
- Creazione di un form PHP per aggiungere dati dinamicamente.
- Buone pratiche di validazione e scrittura ordinata del codice JSON.
- Editor di codice (VS Code, Notepad++)
- Server locale (XAMPP, MAMP o Laragon)
- Browser per testare il programma
1 Obiettivo
Realizzare un programma PHP che gestisca un elenco di libri, salvando i dati in un file libri.json. Ogni libro deve contenere titolo, autore e anno di pubblicazione.
2 Creazione del file JSON iniziale
Crea un file chiamato libri.json nella stessa cartella del tuo script PHP e inserisci alcuni libri di esempio:
[
{ "titolo": "Il nome della rosa", "autore": "Umberto Eco", "anno": 1980 },
{ "titolo": "1984", "autore": "George Orwell", "anno": 1949 },
{ "titolo": "Io, robot", "autore": "Isaac Asimov", "anno": 1950 }
]
3 Lettura e visualizzazione dei dati
Scrivi un file PHP (lettura-libri.php) che legga e visualizzi i libri in formato elenco:
<?php
$json = file_get_contents("libri.json");
$libri = json_decode($json, true);
echo "<h3>Archivio libri:</h3>";
foreach ($libri as $libro) {
echo "- " . $libro["titolo"] . " (" . $libro["anno"] . ") di " . $libro["autore"] . "<br>";
}
?>
4 Aggiungere un nuovo libro
Realizza un form (aggiungi-libro.php) che permetta all'utente di inserire un nuovo libro.
<?php
if ($_SERVER["REQUEST_METHOD"] == "POST") {
$nuovoLibro = [
"titolo" => $_POST["titolo"],
"autore" => $_POST["autore"],
"anno" => (int) $_POST["anno"]
];
$json = file_get_contents("libri.json");
$libri = json_decode($json, true);
$libri[] = $nuovoLibro;
file_put_contents("libri.json", json_encode($libri, JSON_PRETTY_PRINT));
echo "<p style='color:green;'>Libro aggiunto con successo!</p>";
}
?>
<form method="post">
Titolo: <input type="text" name="titolo"><br>
Autore: <input type="text" name="autore"><br>
Anno: <input type="number" name="anno"><br>
<input type="submit" value="Aggiungi libro">
</form>
5 Estensioni possibili
- Verifica che i campi non siano vuoti e mostra un messaggio d'errore.
- Ordina i libri per anno di pubblicazione prima di salvarli.
- Mostra un messaggio personalizzato: "Hai aggiunto il libro X di Y, pubblicato nel Z."
- Salva anche la data e l'ora di inserimento automatica con date("Y-m-d H:i").