2016-03-20 4 views
0

Ich möchte einige grundlegende Einstellungen aus einer Yml-Datei lesen. Hier ist mein Versuch:Kann Daten aus einer Yml-Datei nicht decodieren

#config.yml 
    some_value: "fdsfdsfd" 


    #.hs 
    yamlData <- BS.readFile "./config.yml" 
    let var1 = Data.Yaml.decode yamlData :: Maybe String 
    print $ "the key is " ++ fromJust var1 

Es gibt Maybe.fromJust: Nothing. Muss ich unbedingt eine data aus some_value erstellen und FromJSON und ToJSON dafür implementieren, auch wenn es wie in meinem Fall nur ein String Feld ist? Oder ist das Problem woanders in meinem Code?

+1

Vermutlich haben Sie bereits umgesetzt 'FromJSON',' ToJSON', sonst würden Sie eine Kompilierung Fehler bekommen haben. "Nichts" zu bekommen bedeutet, dass der Yaml nicht im erwarteten Format ist. Warum versuchst du nicht, Yam aus einem bekannten Haskell-Objekt zu produzieren, um zu sehen, was es erwartet? – jamshidh

Antwort

0

Soll ich unbedingt ein Datum von some_value erstellen und implementieren FromJSON und ToJSON für sie, auch wenn, wie in meinem Fall, es ist nur ein String Feld?

Ja.

Das heißt, es ist eine allgemeine Sache (a Value) einfach yaml Daten in entschlüsseln, wenn Sie nicht über Ihre eigene FromJSON Instanz einzurichten:

Prelude Data.Yaml> Data.Yaml.decode "some_value: \"fdsfdsfd\"" :: Maybe Value 
Just (Object fromList [("some_value",String "fdsfdsfd")]) 

Und da ferner, wenn wir nur wollen gleichmäßig Schlüsselwertepaare eingegeben haben, können wir nur dekodieren in eine HashMap und wir erhalten die folgenden:

> Data.HashMap.Strict.lookup ("some_value" :: Text) =<< Data.Yaml.decode "some_value: \"fdsfdsfd\"" :: (Maybe String) 
Just "fdsfdsfd" 
Verwandte Themen