I want to parse a JSON object and create a JSONEvent with the given name and args
I’m using Aeson, and right now I’m stucked on converting "args":[{"a": "b"}] to a [(String, String)].
Thank’s in advance!
{-# LANGUAGE OverloadedStrings #-}
import Control.Applicative
import Data.Aeson
data JSONEvent = JSONEvent [(String, String)] (Maybe String) deriving Show
instance FromJSON JSONEvent where
parseJSON j = do
o <- parseJSON j
name <- o .:? "name"
args <- o .:? "args" .!= []
return $ JSONEvent args name
let decodedEvent = decode "{\"name\":\"edwald\",\"args\":[{\"a\": \"b\"}]}" :: Maybe JSONEvent
Here’s a bit more elaborate example based on ehird’s example. Note that the explicit typing on calls to parseJSON is unnecessary but I find them useful for documentation and debugging purposes. Also I’m not sure what you intended, but with
argswith multiple values I simply concatenate all theargstogether like so:Here’s the code: