on master help sign in
Add simplest example of parsing and encoding.
1d27fc0Neill Bogie
examples/Simplest.hsnew file+33
@@ -0,0 +1,33 @@
1+{-# LANGUAGE OverloadedStrings #-}
2+
3+import Control.Applicative ((<$>), (<*>))
4+import Control.Monad (mzero)
5+import Data.Aeson
6+import qualified Data.Aeson.Types as T
7+import Data.Attoparsec (parse, Result(..))
8+import qualified Data.ByteString.Char8 as BS
9+import qualified Data.ByteString.Lazy.Char8 as BSL
10+
11+main ::IO ()
12+main = do
13+ print $ parseFromString "{\"x\":3.0,\"y\":-1.0}"
14+ let reply = Coord 123.4 20
15+ putStrLn $ BSL.unpack (encode reply)
16+
17+data Coord = Coord { x :: Double, y :: Double } deriving (Show)
18+
19+instance ToJSON Coord where
20+ toJSON (Coord xV yV) = object ["x" .= xV, "y" .= yV]
21+
22+instance FromJSON Coord where
23+ parseJSON (Object v) = Coord <$>
24+ v .: "x" <*>
25+ v .: "y"
26+ parseJSON _ = mzero
27+
28+parseFromString :: String -> Maybe Coord
29+parseFromString s =
30+ let bs = BS.pack s
31+ in case parse json bs of
32+ Done _rest res -> T.parseMaybe parseJSON res
33+ _ -> Nothing