Strumenti per sviluppatori · Convertitori di sintassi
YAML a JSON tipo coercizione: come sì, no e 0777 cambiano significato
· Come funziona
yaml json formati di dati
YAML risolve gli scalari senza virgolette in tipi e le regole differiscono tra YAML 1.1 e 1.2. Questo post mostra esattamente come un convertitore decide che un valore è un booleano, un intero, un float o una stringa e come controllare il risultato.
Il valore che è tornato come vero: un semplice YAML scalare inteso come testo, convertito in JSON come booleano e il servizio che poi si è comportato male
Un valore come `NO` può diventare falso in un caricatore YAML 1.1, ma non è ciò che viene fornito da questo convertitore. Entrambe le scelte ToolAcre utilizzano schemi YAML 1.2, quindi `NO`, `yes`, `no`, `on` e `off` rimangono stringhe. L'apertura corretta è importante perché un esempio che afferma che questo pannello trasforma `NO` in vero o falso insegnerebbe il contrario del comportamento testato.
Esistono ancora sorprese di tipo. Nello schema JSON predefinito, `null` è null mentre `~`, un valore vuoto e `0o755` rimangono stringhe. Selezionando Core questi tre moduli vengono modificati in null, null e 493. L'output è utile proprio perché espone il valore JavaScript risolto, anziché fingere che ogni token YAML semplice abbia un tipo ovvio.
Il valore rimasto nel testo sotto YAML 1.2
La risoluzione implicita avviene mentre js-yaml legge il sorgente. Lo schema limitato selezionato decide se uno scalare semplice corrisponde a un formato null, booleano o numerico prima che il convertitore scriva JSON. La virgolettatura ignora questa decisione: `"0o755"` è testo in entrambi gli schemi e un blocco scalare rimane una stringa che include le interruzioni di riga rappresentate dal suo indicatore di chomping.
Si tratta di analisi e serializzazione, non di una sostituzione di espressioni regolari. Il lettore costruisce stringhe, numeri, booleani, valori nulli, matrici e oggetti; `JSON.stringify` quindi emette quei valori con il rientro selezionato. I commenti e l'ortografia dei token sono già passati dalla fase di scrittura, quindi nessun serializzatore può ricostruire se un numero era originariamente decimale o scritto in un'altra notazione YAML accettata.
Le regole YAML 1.1: yes/no/on/off booleani, 0777 come ottale, 1:30 come sessagesimali e stringhe di versione come 1.10 lette come float
Lo schema elenca YAML 1.1 coercizioni come il tempo sessagesimale e l'ottale ereditato. Sono rischi di compatibilità rilevanti, ma non sono modalità disponibili qui. ToolAcre non offre intenzionalmente uno schema 1.1. La sua interfaccia utente dice che nessuna delle opzioni fornite legge `NO` come false e verifica il codice del paese e le parole sì, no, attivate e disattivate come stringhe.
Questo limite modifica il metodo di debug. Se un'altra applicazione trasforma quelle parole in booleani, confronta la sua configurazione del parser con ToolAcre invece di aspettarti un output identico. Il convertitore può mostrare cosa producono i suoi due schemi; non può certificare lo schema o la versione utilizzata da un corridore CI, un framework o un sistema di distribuzione che successivamente utilizza il file.
YAML 1.1 le coercizioni sono pericoli che questo convertitore evita
Lo schema JSON predefinito accetta solo ortografie scalari compatibili con il modello di JSON. Core aggiunge le familiari forme null YAML, numeri interi esadecimali e ottali, Infinity e NaN. Il core rimane ancora all'interno di un caricatore limitato: tag di oggetti, date, set, mappe ordinate e tag binari specifici della lingua vengono rifiutati anziché costruiti.
Infinity e NaN rivelano un altro confine. JavaScript può conservarli, ma JSON non può scriverli. Il convertitore identifica ciascun percorso e avvisa che il valore diventa nullo. Questo è un passo con perdite ammesso, non una conversione senza perdite. Un `.inf` tra virgolette lo evita perché il valore rimane quindi la stringa letterale `.inf`.
I due schemi YAML 1.2 forniti differiscono solo sui moduli scalari documentati
Incolla `tilde: ~`, `empty:`, `octal: 0o755`, `country: NO` e `answer: yes`. Con la selezione rigorosa, i valori JSON sono `"~"`, `""`, `"0o755"`, `"NO"` e `"yes"`. Con Core selezionato, cambiano solo i primi tre: tilde e vuoto diventano null e ottale diventa 493. Il paese e la risposta rimangono testo in entrambi gli output.
Ora cita ogni valore e ripeti. Entrambi gli schemi restituiscono stringhe perché l'origine indica il tipo previsto. Questo confronto è accurato nel codice e più utile del contrasto tra YAML 1.1 e 1.2 all'interno di uno strumento che non carica mai 1.1. Fornisce inoltre uno strumento rivedibile per controllare un altro parser senza fare supposizioni solo dalla sua documentazione.
Esempio funzionante: un file negli schemi Strict e Core di ToolAcre
I tag standard espliciti vengono accettati solo quando lo schema ristretto li riconosce: `!!str 123` diventa la stringa `123`, mentre `!!int "7"` diventa il numero 7. Tag come `!!binary`, `!!timestamp`, `!!set`, `!!js/function` e i costruttori di oggetti Python vengono rifiutati. Ciò impedisce al lettore YAML di diventare una factory di oggetti arbitrari.
La virgolettatura rimane la scelta portatile quando un valore di configurazione sembra semplicemente digitato. Conserva gli zeri iniziali, l'ortografia della versione e le parole sentinella senza dipendere da un tag esplicito che sopravvive a un altro strumento. Il risultato JSON mostra il tipo scelto, ma non può contenere lo stile di virgoletta o il tag che ha prodotto quel valore.
Cosa non copre: analisi a livello di applicazione del risultato JSON, che potrebbe forzare nuovamente i tipi (ad esempio, la stringa '1' in un numero)
Il codice dell'applicazione potrebbe forzare nuovamente il risultato JSON. Un API può leggere `"1"` e convertirlo in un numero o rifiutarlo rispetto a uno schema. I convertitori di sintassi si fermano dopo aver prodotto il testo JSON; non esegue un validatore del framework, un caricatore di variabili di ambiente o una regola aziendale. Una conversione pulita quindi dimostra la sintassi e la mappatura, non l'accettazione da parte del servizio finale.
Le chiavi YAML duplicate sono un problema separato. ToolAcre mantiene l'ultimo valore e segnala la chiave ripetuta con una posizione. I flussi di più documenti diventano array. Queste scelte possono alterare ciò che vede un'applicazione anche quando è previsto ogni tipo scalare, quindi leggi gli avvisi anziché giudicare solo il corpo JSON formattato.
Conclusione: cita tutto ciò che una macchina potrebbe leggere erroneamente e come la conversione di YAML in JSON nel browser rivela esattamente ciò in cui si è risolto ogni scalare
Cita il testo che assomiglia a un token macchina, quindi controlla i tipi JSON. Utilizza strict quando desideri il vocabolario scalare più piccolo a forma di JSON; scegliere Core deliberatamente quando sono richiesti YAML null e moduli numerici. Nessuna delle due opzioni è YAML 1.1 e nessuna delle due fa sì che un consumatore a valle segua le stesse regole.
Il pannello rende visibile la scelta del parser e restituisce avvisi per i valori che nessun target può rappresentare. Questa è la promessa onesta: rivela come questa implementazione ha risolto ogni scalare. Non rivendica un comportamento YAML universale né conserva commenti, tag e ortografia durante un viaggio di andata e ritorno.