haskell - Parse JSON with fieldnames that contain reserved keywords -


i'm trying parse following json aeson.

{     "data": [         {             "id": "34",             "type": "link",             "story": "foo"         },         {             "id": "35",             "type": "link",             "story": "bar"         }     ] } 

since there lot of field i'd ignore, seems i should use ghc generics. how write data type definition uses haskell keywords data , type? following of course gives: 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) 

you can write own fromjson , tojson instances without relying on ghc.generics. means can use different field names data representation , json representation.

example instances post:

{-# language overloadedstrings #-} import control.applicative import data.aeson import qualified data.bytestring.lazy lbs  data post = post {         postid :: string,         typ :: string,         story :: string   }   deriving (show)  instance fromjson post   parsejson (object x) = post <$> x .: "id" <*> x.: "type" <*> x .: "story"   parsejson _ = fail "expected object"  instance tojson post   tojson post = object      [ "id" .= postid post     , "type" .= typ post     , "story" .= story post     ]  main :: io () main =   print $ (decode $ post "{\"type\": \"mytype\", \"story\": \"really interresting story\", \"id\" : \"someid\"}" :: maybe post)   lbs.putstrln $ encode $ post "myid" "mytype" "some other story" 

the same can done feed. if didn't have ignore fields, use derivejson data.aeson.th, takes function modify field names it's first argument.


Comments

Popular posts from this blog

java - Run a .jar on Heroku -

java - Jtable duplicate Rows -

validation - How to pass paramaters like unix into windows batch file -