JSON Alternativen (zum Zweck der Konfiguration angeben)?

8

Ich mag JSON als ein Format für Konfigurationsdateien für die Software, die ich schreibe. Ich mag, dass es leicht, einfach und weit verbreitet ist. Allerdings finde ich, dass es einige Dinge gibt, die ich wirklich gerne in json hätte.

Json hat keine mehrzeiligen Strings oder hier Dokumente ( Ссылка ), und das ist oft sehr peinlich, wenn Sie wollen Ihre JSON-Datei soll für Menschen lesbar und editierbar sein. Sie können Arrays von Strings verwenden, aber das ist eine kludgy Abhilfe.

Json lässt keine Kommentare zu.

Wenn Sie sich die Formate von Unix-Konfigurationsdateien anschauen, sehen Sie, dass viele Leute ihre eigenen peinlichen Formate für Dinge entwerfen, die es wirklich sinnvoller machen würden, eine Art Allzweck-Sache zu verwenden. Zum Beispiel, hier ist ein Code aus einer Apache-Konfigurationsdatei:

%Vor%

Im Wesentlichen geht es hier darum, dass sie eine extrem schmerzhafte Art erfunden haben, eine boolesche Funktion f (w, x, y, z) = w & amp;! x & amp; y & amp; z zu schreiben. Sie möchten ein logisches "oder"? Sie haben dafür auch einen eigenen (hässlichen) Mechanismus.

Worauf das hinweist, ist eine Art Datenbeschreibungssprache, die einfach und turing-unvollständig ist, aber immer noch expressiver, flexibler und bequemer als json. Kennt jemand eine solche Sprache?

XML ist meiner Meinung nach zu kompliziert, und Lisp-Ausdrücke haben die falschen Eigenschaften (Turing-Vollständigkeit) und fehlen die richtigen Eigenschaften (hier Dokumente, expressive Syntax).

[EDIT] Der Titel ist irreführend. Ich bin nicht wirklich an der nächsten Iteration von json interessiert. Ich bin nicht an Sprachen interessiert, die eine Untermenge von Javascript sind. Ich bin an alternativen Datenbeschreibungssprachen interessiert.

    
Ben Crowell 11.01.2012, 03:14
quelle

6 Antworten

4

Das EDN-Format ist eine Option, die auf Clojure-Literalen basiert. Es ist fast eine Obermenge von JSON, außer dass kein spezielles Symbol Schlüssel und Werte in Maps trennt (wie : in JSON); Stattdessen werden alle Elemente durch Leerzeichen und / oder ein Komma getrennt und eine Karte wird als Liste mit einer geraden Anzahl von Elementen kodiert, eingeschlossen in {..} .

EDN ermöglicht Kommentare (zum Zeilenumbruch mit ; oder zum Ende des nächsten gelesenen Elements mit #_ ), aber nicht zu here-docs. Es ist erweiterbar für neue Typen mit einer -Tag -Notation:

%Vor%

Das Argument des myapp/Person -Tags (d. h. {:first "Fred" :last "Mertz"} ) muss ein gültiger EDN-Ausdruck sein, was es für die Unterstützung von here-doc unausdehnbar macht.

Es hat zwei eingebaute Tags: #inst für Zeitstempel und #uuid . Es unterstützt auch Namespaced-Symbol- (d. H. Identifizierer) und Schlüsselwort- (d. H. Kartentastentasten-) Typen; Sie unterscheidet die Listen (..) und Vektoren [..] . Ein Element eines beliebigen Typs kann als Schlüssel in einer Karte verwendet werden.

Im Kontext Ihres obigen Problems könnte man ein #apache/rule-or -Tag erfinden, das eine Folge von Elementen akzeptiert, deren Semantik ich Ihnen überlassen kann!

    
joeln 25.12.2012 02:58
quelle
4

Sehen Sie sich Ссылка

an

Es ist sogar einfacher als JSON.

Es hat Kommentare im C ++ Stil.

Es ist möglich, mehrzeilige Strings zu formatieren und neue Zeilen- und Tabulatoren zu verwenden, wenn eine "echte" neue Zeile oder Registerkarte benötigt wird.

Hier ist das Beispiel-Snippet:

%Vor%     
igagis 15.12.2014 15:19
quelle
2

Es gibt immer etwas, was ich "echtes JSON" nenne. JSON steht für JavaScript Object Notation, und JavaScript hat Kommentare und etwas, das nahe genug an heredocs ist.

Für das heredoc würden Sie JavaScript E4X Inline-XML verwenden:

%Vor%

Sie können die JavaScript-Engine von Firefox verwenden (FF ist der einzige Browser, der derzeit E4X unterstützt) oder Sie können Ihren eigenen Parser implementieren, was wirklich nicht so schwierig ist.

Hier ist auch der E4X Quickstart Guide.

    
Ry︁ 11.01.2012 03:25
quelle
1

Das 'J' in JSON ist "Javascript". Wenn ein bestimmtes gewünschtes Syntax-Konstrukt nicht in Javascript ist, dann wird es nicht in JSON sein.

Heredocs liegen außerhalb des Zuständigkeitsbereichs von JSON. Das ist ein Sprachsyntax-Konstrukt für vereinfachte mehrzeilige Zeichenfolgendefinition, aber JSON ist eine Transportnotation. Es hat nichts mit Bau zu tun. Es hat jedoch mehrzeilige Strings, einfach indem \n newline Zeichen in Strings erlaubt wird. In JSON gibt es nichts, das besagt, dass Sie in einer Zeichenfolge keinen Zeilenumbruch haben können. Solange die enthaltenen Anführungszeichen korrekt sind, ist es absolut gültig. z.B.

%Vor%

ist 100% zulässiges gültiges JSON und ist ein mehrzeiliger String, während

%Vor%

ist nicht und wird beim Parsen nicht funktionieren.

    
Marc B 11.01.2012 03:23
quelle
0

Ein wichtiges Attribut von JSON (wahrscheinlich das wichtigste) ist, dass Sie zwischen der Zeichenfolgendarstellung und der Darstellung in Objektform einfach "umdrehen" können und die Objekte, die die Objektform darstellen, relativ einfache Arrays und Maps sind. Dies macht JSON in einem Netzwerkkontext so nützlich.

Die von Ihnen gewünschten Funktionen würden dieser doppelten Natur von JSON widersprechen.

    
Hot Licks 11.01.2012 04:17
quelle
0

Für die Konfiguration können Sie eine einbettbare Skriptsprache wie lua oder python verwenden. Dies ist in der Tat nicht ungewöhnlich für die Konfiguration. Das gibt Ihnen mehrzeilige Strings oder hier Dokumente und Kommentare. Es erleichtert auch Dinge wie die von Ihnen beschriebene boolesche Funktion. Die Skriptsprachen sind natürlich, Turing abgeschlossen.

    
Thayne 26.02.2014 06:53
quelle

Tags und Links