J'essaye d'analyser JSON pour produire un type avec plusieurs constructeurs. Le défi est que le type est codé dans le nom d'une clé qui contient les données requises. En théorie, je pourrais utiliser un tas d'appels .:?
et ensuite vérifier si la clé donnée renvoie Just
mais je pense qu'il doit y avoir une meilleure façon. J'ai regardé asum
mais cela ne m'a pas aidé beaucoup (probablement à cause de mon manque de familiarité avec cela).Aeson analyse dans plusieurs constructeurs
import Data.Aeson
import Data.Time.Clock
data Request = Req1 { id :: String, properties :: Value }
| Req2 { id :: String, properties :: Value }
| Req3 { id :: String, time :: UTCTime }
instance FromJSON Request where
parseJSON = withObject "message" $ \o ->
-- ???
demandes Exemple:
{"req1": {"id": "345", "p1": "v1", "p2": "v2"}}
{"req2": {"id": "654", "p3", "v3"}}
{"req3": {"id": "876", "time": 1234567890}}
Ne pouvez-vous pas utiliser un type différent pour chaque objet requête distinct? – jkeuhlen
Voir aussi http://stackoverflow.com/questions/32421836/aeson-parsing-dynamic-keys-as-type-field?rq=1 –