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
:
Tags und Links scala typesafe typesafe-config