Ich versuche, JSON-Daten in Haskell zu analysieren. Nachdem ich eine ganze Reihe von Websites durchsucht habe, ist dies das weiteste, was ich erreichen konnte.JSON Parsing in Haskell
data Address = Address { house :: Integer, street :: String, city :: String, state :: String, zip :: Integer } deriving (Show)
data Person = Person { name :: String, age :: Integer, address :: Address } deriving (Show)
getName :: Person -> String
getName (Person n _ _) = n
getAddress :: Person -> Address
getAddress (Person _ _ a) = a
getState :: Address -> String
getState (Address _ _ _ s _) = s
ich schreiben, dass in einer Datei ex.hs und laden Sie es in GHCI ->
Prelude> import Text.JSON
Prelude Text.JSON> :load ex
Main Text.JSON> let aa = "{\"name\": \"some body\", \"age\" : 23, \"address\" : {\"house\" : 285, \"street\" : \"7th Ave.\", \"city\" : \"New York\", \"state\" : \"New York\", \"zip\" : 10001}}"
...> decode aa :: Result JSValue
Es gibt
Ok (JSObject (JSONObject {fromJSObject = [("name",JSString (JSONString {fromJSString = "some body"})),("age",JSRational False (23 % 1)),("address",JSObject (JSONObject {fromJSObject = [("house",JSRational False (285 % 1)),("street",JSString (JSONString {fromJSString = "7th Ave."})),("city",JSString (JSONString {fromJSString = "New York"})),("state",JSString (JSONString {fromJSString = "New York"})),("zip",JSRational False (10001 % 1))]}))]}))
Unnötig zu sagen, es ist ziemlich ausführliche scheint (und erschreckend). Ich versuchte es
...> decode aa :: Result Person
und es gab mir einen Fehler. Wie gehe ich vor, um eine Instanz der Person-Datenstruktur aus dieser json-Zeichenfolge zu füllen? Zum Beispiel, was soll ich tun, um den Zustand der Person in dem JSON-String zu erhalten ...
Vielleicht sollten Sie auch ein Beispiel zum Erstellen einer Instanz von JSON geben, da Sie es als eine Alternative erwähnt haben. – Wes
@Wes, los gehts. – sabauma
Sehr nützliche Informationen. Ich habe eine Frage. Abgesehen von 'Text.JSON.Generic' (welches Paket kommt es her?), Habe ich auch https://hackage.haskell.org/package/generic-aeson gefunden, das ähnlich die Generics-Maschinerie verwendet, um JSON-Instanzen von Haskell zu machen Daten. Was sind die Unterschiede zwischen diesen beiden Paketen? –