Attenzione! Questo contenuto è vecchioQuesto articolo risale al 2018, quindi i contenuti e le operazioni qui consigliate potrebbero essere diventate obsolete nel corso del tempo.

JSON5 è una nuova versione dello standard JSON, che aggiunge alcune peculiarità alle specifiche originali dello standard, rendendolo un pò più developer-friendly: sono infatti state introdotte alcune novità interessanti, di cui ne cito alcune:

  1. Possibilità di inserire commenti dentro il codice JSON
  2. Compatibilità con i cosiddetti "trailing comma", ovvero, non bisogna dannarsi l'anima per eliminare tutte le virgole in eccesso al termine di un array
  3. Le stringhe possono essere istanziate anche con i single quotes '
  4. I numeri possono essere definiti anche con Infinity, -Infinity, NaN, e -NaN
  5. I numeri possono essere definiti anche come esadecimali

Tutti i dettagli di implementazione sono disponibili sulla pagina ufficiale di JSON5.

Come fare quindi per utilizzare tutte le potenzialità di JSON5 anche su PHP?

Ci viene in aiuto una comoda libreria installabile via composer, colinodell/json5 (link a github)

E' sufficiente integrarla all'interno del vostro progetto con composer:

composer require colinodell/json5

Da questo punto in poi, è possibile utilizzare, al posto delle funzioni json_encode () e json_decode (), i corrispettivi json5_encode () e json5_decode (), che funzionano con gli stessi identici parametri rispetto al passato. Quindi, è possibile effettuare una migrazione di tutto il vostro codice sorgente compatibile con json, semplicemente facendo un search-and-replace globale sulle funzioni json_encode e json_decode, rimpiazzandole con le stringhe nuove.

Ecco un esempio di codice JSON5

{
    foo: 'bar',
    while: true,

    this: 'is a \
multi-line string',

    // this is an inline comment
    here: 'is another', // inline comment

    /* this is a block comment
       that continues on another line */

    hex: 0xDEADbeef,
    half: .5,
    delta: +10,
    to: Infinity,   // and beyond!

    finally: 'a trailing comma',
    oh: [
        "we shouldn't forget",
        'arrays can have',
        'trailing commas too',
    ],
}