Vai al contenuto principale
CuteJSON
↑↓ Naviga Enter Seleziona Esc Chiudi

Come convertire JSON in letterali di oggetti JavaScript e viceversa

Pubblicato 3 min di lettura Di Akash Kinkar Pandey

Ogni documento JSON e gia un espressione JavaScript valida. Puoi incollare JSON in un assegnamento const config = e si esegue. Il lavoro interessante e il contrario: i veri letterali di oggetti JavaScript sono pieni di cose che JSON vieta, e un convertitore che indovina cosa volevano perdono dati mentre segnala successo.

Utilizzo del convertitore JSON a JavaScript

Scegli una direzione e premi Converti. Scrivendo JavaScript, una chiave di oggetto che e un identificativo valido e scritta senza virgolette, quindi "name" diventa name, mentre una chiave come "display name" resta tra virgolette perche scriverla senza virgolette cambierebbe la sua ortografia. Un oggetto o array vuoto resta su una riga. I numeri passano attraverso il flusso di token invece che attraverso JSON.parse, quindi un intero di venti cifre torna con le venti cifre esatte.

Cosa accetta il lettore

Rileggendo JavaScript in JSON, lo strumento capisce i letterali di oggetti che incoleresti davvero da un file di configurazione: chiavi senza virgolette, stringhe tra apici, commenti // e /* */, virgole finali, e un nome const, let o var opzionale all inizio con un punto e virgola alla fine. Un letterale di template senza interpolazione e accettato anche, perche contiene testo puro.

Un ortografia di numero che JSON rifiuta e normalizzato alla sua esatta forma JSON:

const numbers = { a: .5, b: 5., c: 5.e3 }
{
  "a": 0.5,
  "b": 5,
  "c": 5e3
}

Cosa viene rifiutato, e perche

Tutto che JSON non puo contenere viene rifiutato per nome invece di indovinato. undefined, NaN e Infinity non hanno numero o valore JSON, quindi vengono rifiutati. Anche numeri esadecimali, ottali e binari, separatori di cifre con trattino basso come 1_000, e uno zero iniziale, tutti cambierebbero di significato se JSON li leggesse. Un espressione regolare, una funzione, una parola nuda, e interpolazione di template ${...} vengono rifiutati anche, perche sono codice, non dati.

Due rifiuti meritano un occhiata piu attenta. Una chiave che appare due volte in un oggetto viene rifiutata, perche JSON non ha modo di contenere entrambi i valori sotto un unico nome. E una chiave __proto__ il cui valore e un oggetto o null viene rifiutata, perche in un letterale di oggetto JavaScript quell ortografia non crea una proprieta. Imposta il prototype del nuovo oggetto, quindi convertirla in JSON con una chiave __proto__ ordinaria inventerebbe una proprieta che il codice originale non ha mai avuto.

Perche undefined non viene trasformato in null per default

JSON non ha undefined, quindi un convertitore deve fare qualcosa. Scrivere null cambia silenziosamente il significato dei dati: un undefined in un oggetto di configurazione di solito significa che un campo non e ancora configurato, il che non e la stessa cosa di un null che il codice controlla dopo. Lo strumento rifiuta per default, e l opzione Convert undefined to null esiste per quando vuoi davvero quel significato.

Viaggio di andata e ritorno

Convertire un documento nell altro formato e il vero test di se le regole di virgolette e rifiuto sono corrette. Un letterale di oggetti con chiavi senza virgolette, apici e una virgola finale torna come JSON con ogni chiave virgolettata e ogni cifra intatta, e convertire di nuovo quel JSON torna lo stesso oggetto. Una regola sbagliata di solito si mostra solo quando riconverti e confronti.

Torna a tutti i post