JSON (JavaScript Object Notation) è un formato utilizzato per lo scambio di dati, tale notazione deve gran parte del suo successo alla semplicità di lettura e scrittura da parte degli sviluppatori e, nello stesso tempo, risulta semplice per un calcolatore generare e analizzarne la sintassi.
Un esempio di una stringa JSON valida è la seguente:
{
"firstName": "Simone",
"lastName": "D'Amico",
"birthDate": "2000-01-01",
"country": "IT"
}
Come possiamo notare, essa è molto semplice da leggere perché scritta in modo molto vicino alla sintassi degli array che già conosciamo. PHP ci mette a disposizione due funzioni per convertire una stringa JSON in un oggetto o un array e viceversa.
Convertire una stringa JSON in PHP
La funzione che abbiamo a disposizione per decodificare una stringa JSON si chiama json_decode()
e prende in ingresso principalmente due parametri:
$json
: la stringa JSON da decodificare;$assoc
: un booleano che indica se convertire la stringa in un oggettostdClass
quando il valore èfalse
, oppure in un array associativo se il valore ètrue
. Di default èfalse
.
Supponiamo di avere la stringa proposta in precedenza all'interno di una variabile e vediamo come convertirla in un array associativo:
$jsonUser = '{"firstName":"Simone","lastName":"D\'Amico"}';
$user = json_decode($jsonUser, true);
print_r($user);
Il risultato che otteniamo è il seguente:
Array
(
[firstName] => Simone
[lastName] => D'Amico
)
Nel caso in cui una stringa sia malformata, viene restituito null
, possiamo però utilizzare la funzione json_last_error_msg()
per farci restituire l'errore relativo:
// la stringa contiene una virgola di troppo dopo il nome
$jsonUser = '{"firstName":"Simone",}';
$user = json_decode($jsonUser, true);
echo json_last_error_msg();
La funzione restituirà una notifica Syntax error
dato che la decodifica non è andata a buon fine in quanto la stringa è malformata.
Convertire un array in JSON
Supponiamo di dover gestire il caso contrario a quello appena visto: abbiamo un array (o un qualsiasi altro tipo di dato) e vogliamo convertirlo in una stringa JSON. In questo caso abbiamo bisogno della funzione json_encode()
che, dato un valore, restituirà la stringa corrispondente in JSON. Un esempio:
$user = [
'firstName' => 'Simone',
'lastName' => 'D\'Amico',
'age' => 30
];
echo json_encode($user);
Il risultato che otterremo è il seguente:
{"firstName":"Simone","lastName":"D'Amico","age":30}