Ich versuche, den folgenden JSON mit AESON zu analysieren.Parse JSON mit Feldnamen, die reservierte Schlüsselwörter enthalten
{
"data": [
{
"id": "34",
"type": "link",
"story": "foo"
},
{
"id": "35",
"type": "link",
"story": "bar"
}
]
}
Da es eine Menge von Feld sind würde ich ignorieren möchte, so scheint es I should use GHC generics. Aber wie schreibt man eine Datentyp-Definition, die Haskell-Schlüsselwörter wie data
und type
verwendet? Im Folgenden natürlich gibt: parse error on input `data'
data Feed = Feed {data :: [Post]}
deriving (Show, Generic)
data Post = Post {
id :: String,
type :: String,
story :: String
}
deriving (Show, Generic)
Danke, funktioniert gut! Wäre es auch möglich, diesen Ansatz mit 'Generic' zu kombinieren? Nehmen wir an, der 'Post'-Typ hatte nicht das' type'-Attribut, es scheint, dass ich 'Post derivating (Generic)' nicht haben kann, wenn 'Feed's' parseJSON' manuell implementiert und dann wie in der Frage kombiniert wird . – mb21
Schließlich fragte ich mich, ob ich wirklich den 'Feed'-Datentyp brauche, nur um das' data'-Attribut im JSON loszuwerden oder ob ich irgendwie direkt an die Posts gelangen kann. – mb21
@ mb21 [a] hat FromJSON/ToJSON-Instanzen. Wenn Sie also nur eine Liste von Posts serialisieren möchten, tun Sie dies direkt mit 'encode listOfPosts'. Und Sie können den Ansatz mit Generic kombinieren, leiten Sie die Instanz für Post einfach wie jede andere Instanz mit Generic ab und schreiben Sie die Instanz für Feed manuell. Es funktioniert einfach. – bennofs