Capire PHP json_encode() e json_decode()

14 ottobre 2025

Il JSON (JavaScript Object Notation) è diventato lo standard de facto per lo scambio di dati nello sviluppo web moderno grazie al suo formato leggero e leggibile dall'uomo e alla sua compatibilità con diversi linguaggi di programmazione. In PHP, due funzioni integrate—json_encode() E json_decode()—sono fondamentali per lavorare con i dati JSON. Queste funzioni consentono agli sviluppatori di convertire le strutture dati PHP in stringhe JSON e viceversa, garantendo una comunicazione fluida tra server, API e applicazioni front-end. Questo articolo approfondisce il tema del PHP json_encode() e PHP json_decode(), approfondendone la sintassi, le opzioni, i casi d'uso, la gestione degli errori e le migliori pratiche.

Cosa sono json_encode() E json_decode()?

IL json_encode() La funzione in PHP converte una variabile PHP (ad esempio un array o un oggetto) in una stringa in formato JSON. Al contrario, json_decode() accetta una stringa JSON e la riconverte in una variabile PHP, solitamente un array o un oggetto. Queste funzioni sono fondamentali per attività quali lo sviluppo di API, l'archiviazione dei dati e la comunicazione tra i backend PHP e i frontend JavaScript.

Perché JSON?

JSON è un formato basato su testo, facile da leggere e scrivere per gli utenti e semplice da analizzare e generare per i computer. Tra i suoi principali vantaggi figurano:

  • Linguisticamente indipendente: Supportato praticamente da tutti i linguaggi di programmazione.
  • Leggero: Carico utile inferiore rispetto all'XML.
  • Strutturato: Rappresenta strutture di dati complesse, come gli array e gli oggetti, in modo standardizzato.

Le funzioni JSON di PHP colmano il divario tra i tipi di dati nativi di PHP e il formato JSON, rendendole indispensabili per le moderne applicazioni web.

Alla scoperta di PHP json_encode()

IL json_encode() La funzione converte un valore PHP in una stringa JSON. La sua sintassi di base è:

php
string json_encode(mixed $value, int $flags = 0, int $depth = 512)
  • $value: Il valore PHP da codificare (ad esempio, array, oggetto, stringa, numero, valore booleano o null).
  • $flags: Maschera di bit facoltativa per modificare il comportamento della codifica (ad esempio, JSON_PRETTY_PRINT, JSON_FORCE_OBJECT).
  • $ profondità: Profondità massima di nidificazione per la codifica (il valore predefinito è 512).

Come funziona PHP json_encode() Opere

Quando si passa una variabile PHP a json_encode(), serializza i dati in una stringa JSON. Ad esempio:

php
$data = [
    'name' => 'Alice',
    'age' => 30,
    'is_student' => false
];
$json = json_encode($data);
echo $json;

Uscita:

json
{"name":"Alice","age":30,"is_student":false}

Questo output è una stringa JSON compatta che rappresenta l'array associativo PHP.

PHP di base json_encode() Opzioni

IL $flags Questo parametro consente di personalizzare il processo di codifica. Alcuni flag comunemente utilizzati sono:

  • JSON_PRETTY_PRINT: Formatta l'output JSON con indentazioni e interruzioni di riga per facilitarne la lettura.
  • JSON_FORCE_OBJECT: Imposta la codifica degli array (anche quelli indicizzati) come oggetti JSON.
  • JSON_NUMERIC_CHECK: Converte le stringhe numeriche in numeri nell'output JSON.
  • JSON_UNESCAPED_SLASHES: Impedisce la fuga delle barre (/).
  • JSON_UNESCAPED_UNICODE: Codifica i caratteri Unicode in forma letterale anziché come sequenze di escape (ad esempio, “é” diventa é).

Esempio con JSON_PRETTY_PRINT:

php
$data = ['name' => 'Bob', 'age' => 25];
$json = json_encode($data, JSON_PRETTY_PRINT);
echo $json;

Uscita:

json
{
    "name": "Bob",
    "age": 25
}

Gestione di dati complessi

json_encode() è in grado di gestire array e oggetti annidati. Ad esempio:

php
$data = [
    'user' => [
 'name' => 'Charlie',
 'details' => [
 'email' => '[email protected]',
 'active' => true
        ]
    ],
    'scores' => [95, 88, 92]
];
echo json_encode($data, JSON_PRETTY_PRINT);

Uscita:

json
{
    "user": {
 "name": "Charlie",
 "details": {
 "email": "[email protected]",
 "active": true
        }
    },
    "scores": [95, 88, 92]
}

Limiti ed errori

json_encode() in alcuni casi potrebbe non funzionare, restituendo falso e l'impostazione di un codice di errore. Tra i problemi più comuni figurano:

  • Caratteri UTF-8 non validi: Il formato JSON richiede una codifica UTF-8 valida. Le stringhe non UTF-8 causano un errore di codifica.
  • Profondità eccessiva: Se la struttura dei dati supera il $ profondità limite (valore predefinito 512), la codifica non va a buon fine.
  • Tipi non supportati: Le risorse (ad esempio, gli handle dei file) non possono essere codificate.

Per eseguire il debug, utilizzare json_last_error() E json_last_error_msg():

php
$data = ["name" => "\xB1\x31"]; // UTF-8 non valido
$json = json_encode($data);
if ($json === false) {
    echo "Errore: " . json_last_error_msg();
}

Uscita:

Errore: caratteri UTF-8 non validi, probabilmente codificati in modo errato

Migliori pratiche per PHP json_encode()

  1. Verifica dei dati inseriti: Assicurarsi che le stringhe siano codificate in UTF-8 utilizzando utf8_encode() O mb_convert_encoding() se necessario.
  2. Utilizzare i flag appropriati: Scegli bandiere come JSON_PRETTY_PRINT per il debug oppure JSON_NUMERIC_CHECK/code> per i dati numerici.
  3. Gestione degli errori: Controllare sempre il valore restituito e utilizzare json_last_error() per diagnosticare i problemi.
  4. Attenzione alla profondità: Per strutture profondamente annidate, aumentare il $ profondità impostare il parametro con cautela per evitare overflow dello stack.

Alla scoperta di PHP json_decode()

IL json_decode() La funzione converte una stringa JSON in una variabile PHP. La sua sintassi è:

php

mixed json_decode(string $json, bool $assoc = false, int $depth = 512, int $flags = 0)

  • $json: La stringa JSON da decodificare.
  • $assoc: Se vero, restituisce array associativi anziché oggetti per gli oggetti JSON.
  • $ profondità: Profondità massima di nidificazione per la decodifica (valore predefinito 512).
  • $flags: Opzioni facoltative per modificare il comportamento della decodifica.

Come funziona PHP json_decode() Opere

Per impostazione predefinita, json_decode() converte oggetti JSON in PHP stdClass oggetti. Ad esempio:

php
$json = '{"name":"David","age":40}';
$data = json_decode($json);
echo $data->name; // Accesso come oggetto

Uscita:

David

Se si imposta $assoc = vero, gli oggetti JSON vengono convertiti in array associativi:

php
$data = json_decode($json, true);
echo $data['name']; // Accesso come array

Uscita:

David

Decodifica di JSON complessi

json_decode() gestisce le strutture annidate senza problemi:

php
$json = '{
    "user": {
 "name": "Eve",
 "details": {
 "email": "[email protected]",
            "active": true
 }
    },
    "scores": [85, 90, 88]
}';
$data = json_decode($json, true);
echo $data['user']['details']['email'];

Uscita:

[email protected]

PHP di base json_decode() Opzioni

IL $flags Il parametro supporta opzioni quali:

  • JSON_BIGINT_AS_STRING: Tratta i numeri interi di grandi dimensioni come stringhe per evitare perdite di precisione.
  • JSON_THROW_ON_ERROR: Genera un JsonException in caso di errore, invece di restituire nullo.

Esempio con JSON_THROW_ON_ERROR:

php
$json = '{"name":"Frank","age":}'; // JSON non valido
try {
$data = json_decode($json, false, 512, JSON_THROW_ON_ERROR);
} catch (JsonException $e) {
echo "Errore: " . $e->getMessage();
}

Uscita:

Errore: errore di sintassi

Gestione degli errori

Mi piace json_encode(), json_decode() può fallire, restituendo nullo a meno che JSON_THROW_ON_ERROR viene utilizzato. Tra gli errori più comuni figurano:

  • Errori di sintassi: JSON non valido (ad esempio, virgole o parentesi graffe mancanti).
  • Profondità superata: La struttura JSON supera il $ profondità
  • JSON non valido: Input non JSON.

Utilizzo json_last_error() per diagnosticare:

php
$json = '{"name":"Grace",}'; // JSON non valido
$data = json_decode($json);
if ($data === null && json_last_error() !== JSON_ERROR_NONE) {
echo "Errore: " . json_last_error_msg();
}

Uscita:

Errore: errore di sintassi

Migliori pratiche per PHP json_decode()

  1. Convalida JSON: Utilizza strumenti come jsonlint oppure controlla json_last_error() per garantire che i dati inseriti siano validi.
  2. Scegli il tipo di output: Utilizzo $assoc = vero per gli array, se preferisci l'accesso agli array rispetto agli oggetti.
  3. Gestione di numeri interi di grandi dimensioni: Utilizzo JSON_BIGINT_AS_STRING per evitare problemi di precisione con numeri molto grandi.
  4. Utilizzare la gestione degli errori: Preferire JSON_THROW_ON_ERROR affinché le moderne applicazioni PHP possano rilevare gli errori in modo esplicito.

Casi d'uso pratici

1. Creazione di un'API

Le API restituiscono spesso risposte in formato JSON. Ecco un esempio di endpoint di un'API PHP:

php
header('Content-Type: application/json');
$data = [
    'status' => 'success',
    'data' => [
 'users' => [
 ['id' => 1, 'name' => 'Hannah'],
 ['id' => 2, 'name' => 'Ian']
        ]
    ]
];
echo json_encode($data, JSON_PRETTY_PRINT);

Uscita:

json
{
    "status": "success",
    "data": {
 "users": [
 {
 "id": 1,
 "name": "Hannah"
            },
 {
 "id": 2,
 "name": "Ian"
 }
 ]
    }
}

2. Utilizzo di un'API

Quando si recupera un dato JSON da un'API, utilizzare json_decode() per elaborare la risposta:

php
$json = file_get_contents('https://api.example.com/users');
$data = json_decode($json, true);
if (isset($data['users'])) {
    foreach ($data['users'] as $user) {
 echo $user['name'] . "\n";
    }
}

3. Salvataggio della configurazione

JSON è ideale per memorizzare i dati di configurazione:

php
$config = [
    'db' => [
 'host' => 'localhost',
 'user' => 'root',
 'pass' => 'secret'
    ]
];
file_put_contents('config.json', json_encode($config, JSON_PRETTY_PRINT));

// Da leggere in seguito
$json = file_get_contents('config.json');
$config = json_decode($json, true);
echo $config['db']['host']; // localhost

Errori comuni e soluzioni

  1. Codifica dei dati non UTF-8:
    • Problema: json_encode() genera un errore a causa di caratteri UTF-8 non validi.
    • Soluzione: Convertire le stringhe in UTF-8 utilizzando utf8_encode() O mb_convert_encoding().
  2. Precisione dei numeri interi di grandi dimensioni:
    • Problema: I numeri interi di grandi dimensioni perdono precisione quando vengono convertiti in valori in virgola mobile.
    • Soluzione: Utilizzo JSON_BIGINT_AS_STRING in json_decode().
  3. Dati JSON non validi:
    • Problema: json_decode() ritorni nullo in caso di JSON non valido.
    • Soluzione: Verifica la validità del JSON e utilizza json_last_error() O JSON_THROW_ON_ERROR.
  4. Nidificazione profonda:
    • Problema: Superamento del limite di profondità predefinito (512).
    • Soluzione: Aumentare con cautela la profondità $, ad esempio, json_encode($data, 0, 1024).

Considerazioni sulle prestazioni

  • Utilizzo della memoria: I set di dati di grandi dimensioni possono consumare una quantità significativa di memoria durante la codifica/decodifica. Per i set di dati di grandi dimensioni, utilizzare generatori o lo streaming.
  • Velocità: json_encode() E json_decode() sono altamente ottimizzati, ma evitano conversioni non necessarie. Memorizza nella cache i risultati JSON quando possibile.
  • Convalida: Effettuare una pre-convalida dei dati per evitare tentativi di codifica superflui.

Conclusione

IL json_encode() E json_decode() Le funzioni sono strumenti potenti in PHP per lavorare con i dati JSON. Che si tratti di sviluppare API, utilizzare servizi esterni o archiviare dati strutturati, queste funzioni offrono un modo solido e flessibile per gestire il formato JSON. Comprendendo le loro opzioni, la gestione degli errori e le migliori pratiche, è possibile evitare le insidie più comuni e scrivere codice efficiente e affidabile. Sperimentate con gli esempi forniti, esplorate i vari parametri e sfruttate queste funzioni per ottimizzare il vostro Applicazioni PHP.

Come leader Società di sviluppo PHP, Carmatec È specializzata nella realizzazione di applicazioni web dinamiche, scalabili e ad alte prestazioni utilizzando PHP e le tecnologie correlate. Grazie alla profonda competenza nei framework e nelle funzionalità di base di PHP, i nostri sviluppatori garantiscono che le vostre applicazioni siano ottimizzate in termini di velocità, sicurezza e gestione fluida dei dati, consentendo alla vostra azienda di offrire esperienze digitali eccezionali.