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

Come funziona CuteJSON, e perche nulla che incollate lascia il vostro browser

Pubblicato 5 min di lettura Di Akash Kinkar Pandey

Ogni strumento in questo sito funziona nel vostro browser. Non c'e upload, non c'e account e non c'e un servidor che vede il vostro JSON, e questo post spiega come funziona, come verificarlo voi stessi invece di fidarvi, e cosa gli strumenti fanno deliberatamente non fare.

Cosa succede quando incollate

Quando aprite una pagina di uno strumento, il vostro browser scarica una pagina HTML e un piccolo file JavaScript. Questo e tutto lo strumento. Quando incollate un documento e premete un pulsante, l'analisi e la stampa avvengono all'interno della scheda, e il risultato viene scritto di nuovo nella pagina. Nulla viene inviato da nessuna parte, perche non c'e dove inviarlo: il sito non ha nessun backend per i dati degli strumenti.

Questo significa anche che nulla viene memorizzato. Chiudete la scheda e il documento scompare. Non c'e cronologia da cancellare, non c'e account da eliminare e non c'e una cache che conserva i vostri dati. Il sito conserva due piccoli valori nel vostro browser, la vostra scelta del tema e la vostra risposta al avviso dei cookie, e entrambi rimangono sul vostro dispositivo.

Verificate voi stessi in trenta secondi

Qualsiasi affermazione sulla privacy che non potete verificare e solo una frase in una pagina. Questa richiede mezzo minuto per testare:

  1. Aprite qualsiasi strumento, per esempio il formatore.
  2. Aprite gli strumenti di sviluppo del browser e passate alla scheda Rete.
  3. Svuotate la lista, incollate un po' di JSON e premete Formatta.

Non appare nulla di nuovo nella lista, perche nessuna richiesta viene effettuata. Confrontatelo con uno strumento che invia a un endpoint quando premete il pulsante, lo vedrete immediatamente nello stesso pannello.

C'e un'eccezione deliberata, ed e su una pagina diversa: il modulo di contatto invia effettivamente quello che digitate, perche un messaggio che rimane nel vostro browser non e un messaggio. Tutto il resto rimane locale.

Il progetto afferma anche questo automaticamente. La suite di test end-to-end incolla un marcatore unico in ogni strumento, lo esegue, e fallisce la build se quello che segue appare in qualsiasi richiesta che la pagina effettua. Questo test viene eseguito ad ogni build, quindi l'affermazione non puo deteriorarsi silenziosamente la prossima volta che qualcuno aggiunge una funzionalita.

Perche gli strumenti leggono token invece di analizzare

La maggior parte dei formattatori online fa qualcosa del genere internamente:

JSON.stringify(JSON.parse(input), null, 2)

Sembra innocuo e corrompe i dati in due modi specifici.

Interi lunghi perdono precisione. I numeri JavaScript sono double, quindi un intero piu lungo di circa sedici cifre non puo essere mantenuto esattamente. Incollate {"id": 12345678901234567890} in un formatore costruito cosi e ottenete 12345678901234567000 di nuovo. Nulla vi avverte.

Le chiavi che sembrano interi vengono riordinate. Gli oggetti JavaScript ordinano le chiavi simili a interi numericamente, prima di tutto il resto. Quindi {"2": "argento", "1": "oro"} torna come {"1": "oro", "2": "argento"}, questo conta quando l'ordine era significativo, e spesso lo e in un file di configurazione.

Gli strumenti qui non costruiscono mai un valore JavaScript dal vostro documento. Li tokenizzano, mantenendo il testo sorgente esatto di ogni token, e ristampano il flusso di token con spaziatura diversa. Il vostro documento torna byte per byte come lo avete scritto, con solo la spaziatura modificata. I test unitari bloccano entrambi i casi, cosi un refactor futuro non puo reintrodurre nessuno dei due.

La stessa decisione attraversa il resto del sito. Il visualizzatore mostra il testo che avete scritto effettivamente accanto a ogni chiava. Il diff non chiamera due interi di venti cifre uguali solo perche collassano nello stesso double. Il valutatore del puntatore restituisce la fonte esatta del valore che ha risolto.

Perche i messaggi di errore sono cosi

Un validatore che dice “token imprevisto” non vi ha detto nulla che non sapevate gia. La maggior parte del lavoro nell'analizzatore qui e andata nei messaggi invece. Una virgola finale viene segnalata come una virgola finale. Una parentesi non chiusa viene segnalata alla riga dove la parentesi e stata aperta, non alla fine del file. Una parola chiave con caso errato suggerisce la grafia in minuscolo. Una chiave duplicata produce un avviso con entrambi i numeri di riga invece del silenzio.

Se volete il catalogo, il post sugli errori comuni di sintassi JSON percorre i nove che compaiono di piu, con la modifica che corregge ciascuno.

Cosa il sito non fa

Alcuni standard qui sono implementati parzialmente. Il testatore JSONPath supporta i selettori che le query reali usano e li elenca nella pagina. Le estensioni delle funzioni e alcuni altri angoli della RFC 9535 mancano, e usarne una produce un messaggio che nomina la funzionalita invece di un fallimento vago. JSON Pointer e il caso opposto: la RFC 6901 ha quattro pagine, quindi tutto e implementato.

La riparazione puo cambiare i vostri dati. NaN, Infinity e undefined non hanno un equivalente JSON, quindi lo strumento di riparazione li trasforma in null ed elenca quelle modifiche separatamente dalle correzioni di punteggiate. Leggete quella lista invece di fidarvi dell'output.

I documenti molto grandi si degradano di proposito. Oltre circa duecentomila caratteri, la colorazione della sintassi si disabilita per mantenere la digitazione fluida, e la pagina lo dice quando succede. Il visualizzatore disegna un ramo solo quando lo aprite, e oltre qualche migliaio di valori si rifiuta di espandere tutto in una volta piuttosto che congelare la scheda per un minuto.

Da dove iniziare

Se siete arrivati con un documento rotto, il validatore vi dira cosa non va e lo strumento di riparazione correggera le parti meccaniche. Se siete arrivati con un documento funzionante che non capite, il visualizzatore e il modo piu veloce per entrare. Tutto il resto e sulla pagina degli strumenti.

Torna a tutti i post