Mi piace JSON come formato per i file di configurazione per il software che scrivo. Mi piace il fatto che sia leggero, semplice e ampiamente supportato. Tuttavia, sto scoprendo che ci sono alcune cose che mi piacerebbe davvero che JSON non avesse.Alternative JSON (allo scopo di specificare la configurazione)?
Json non ha stringhe multilinea o qui documenti (http://en.wikipedia.org/wiki/Here_document), e questo è spesso molto imbarazzante quando si desidera che il file JSON sia leggibile ed accessibile dall'utente. Puoi utilizzare array di stringhe, ma questa è una soluzione sfacciata.
Json non ammette commenti.
Se si guardano i formati dei file di configurazione di Unix, si vede un sacco di persone che progettano i propri formati scomodi per cose che avrebbe davvero più senso fare usando una specie di cosa generale. Ad esempio, ecco qualche codice da un file di configurazione di Apache:
RewriteEngine on
RewriteBase /temp
RewriteCond %{HTTP_ACCEPT} application/xhtml\+xml
RewriteCond %{HTTP_ACCEPT} !application/xhtml\+xml\s*;\s*q=0
RewriteCond %{REQUEST_URI} \.html
RewriteCond %{THE_REQUEST} HTTP/1\.1
RewriteRule t\.html t.xhtml [T=application/xhtml+xml]
In sostanza, quello che sta succedendo qui è che hanno inventato un modo estremamente dolorosa di scrivere una funzione booleana f (w, x, y, z) = w &! x & y & z. Vuoi un "o" logico? Hanno anche un meccanismo separato (brutto) per quello.
Ciò che sembra indicare è una sorta di linguaggio di descrizione dei dati semplice e turing-incompleto, ma ancora più espressivo, flessibile e conveniente di json. Qualcuno sa di un tale linguaggio?
A mio gusto, XML è troppo complicato, e le espressioni chiare hanno le caratteristiche sbagliate (completezza di Turing) e mancano delle caratteristiche giuste (qui documenti, sintassi espressiva).
[EDIT] Il titolo è fuorviante. Non sono letteralmente interessato alla prossima iterazione di JSON. Non sono interessato alle lingue che sono un sottoinsieme di javascript. Sono interessato ai linguaggi di descrizione dei dati alternativi.
[YAML] (http://en.wikipedia.org/wiki/YAML)? – BalusC
@BalusC: Suggerimento interessante :-) Ma YAML non sembra offrire un buon modo di fare la funzione booleana/l'esempio di Apache o le applicazioni con un sapore simile. –