Wie bekomme ich einen unverpackten Schlüssel in TypeSafe Config?

8

Testfall:

%Vor%

Dieser Test schlägt fehl, weil der Schlüssel tatsächlich "quoted.key.1" , nicht quoted.key.1 ist. Gibt es eine vorgeschlagene Möglichkeit, dies auszupacken, oder muss ich manuell nach umgebenden Zitaten suchen und sie jedes Mal entfernen?

    
Chad Retz 12.02.2014, 19:43
quelle

1 Antwort

7

Lesen Sie in den API-Dokumenten unter "Pfade, Schlüssel und Config vs. ConfigObject" nach: Ссылка und in der README hier: Ссылка

(Vorschläge zur Verbesserung dieser Dokumente sind willkommen.)

Die Schlüssel im Eintragssatz (und der Config) sind Pfadausdrücke. Dies sind Strings, die analysiert werden müssen. Es gibt eine Analyse-Methode in ConfigUtil, siehe Ссылка

Es wird nicht funktionieren, nur Anführungszeichen zu entfernen, das Parsen ist etwas komplexer als das. Glücklicherweise können Sie einfach die Methode ConfigUtil.splitPath verwenden.

Die beiden Möglichkeiten, Schlüssel auf der Stammebene zu iterieren, sind also etwa wie folgt: Zuerst mit Config:

%Vor%

Dann mit ConfigObject:

%Vor%

Ich habe nicht versucht, die obigen Beispiele zu kompilieren, also vergebe irgendwelche albernen Syntaxfehler.

Wenn Ihre Konfiguration nur eine Ebene enthält (keine verschachtelten Objekte), sind die beiden oben beschriebenen Möglichkeiten identisch. Wenn Sie jedoch verschachtelte Werte haben, sind sie nicht identisch, weil das Iterieren von Config Ihnen alle Blatt -Werte liefert, während das Iterieren von ConfigObject ( config.root() ) Ihnen alle unmittelbaren Kinder des Stamms gibt wenn diese unmittelbaren Kinder selbst Objekte sind.

Sagen Sie, Sie haben:

%Vor%

Wenn Sie das als Config iterieren, erhalten Sie einen Eintrag mit dem Pfad foo.bar.baz als Schlüssel und dem Wert 10 . Wenn Sie es als ConfigObject iterieren, dann haben Sie einen Eintrag mit dem Schlüssel foo und der Wert ist ein Objekt, das wiederum den Schlüssel bar enthält. Wenn Sie dies als Config iterieren, könnten Sie splitPath the foo.bar.baz und Sie würden ein Array von drei Strings bekommen, foo , bar und baz .

Um ein Config in ein ConfigObject zu konvertieren, benutzen Sie die root() Methode und um ConfigObject in Config zu konvertieren verwenden Sie die toConfig() Methode. Also config.root().toConfig() == config .

Außerdem könnte die obige Konfigurationsdatei äquivalent geschrieben werden als:

%Vor%

Aber wäre anders, wenn geschrieben als:

%Vor%

Da Sie im ersten Fall Objekte verschachtelt haben, haben Sie im zweiten Fall ein einzelnes Objekt mit Punkten im Schlüsselnamen. Dies liegt an den Anführungszeichen.

Wenn Sie "foo.bar.baz" mit Anführungszeichen schreiben, dann würde bei der Iteration von Config der zurückgegebene Pfad in Anführungszeichen gesetzt und splitPath() würde ein Array von einem Element foo.bar.baz zurückgeben. Wenn Sie ConfigObject iterieren, hätten Sie ein einzelnes Objekt, das einen Eintrag mit foo.bar.baz als Schlüssel und 10 als Wert enthalten würde. Schlüssel, die . oder andere Sonderzeichen enthalten, müssen in Anführungszeichen gesetzt werden, damit sie als einzelne Schlüssel und nicht als Pfade interpretiert werden.

Um Ihren Testfall zu bestehen, können Sie dies mit splitPath tun:

%Vor%

Sie können dies auch mit ConfigObject :

tun %Vor%     
Havoc P 13.02.2014, 19:48
quelle

Tags und Links