roundtrip-aeson alternatives and similar packages
Based on the "Data" category.
Alternatively, view roundtrip-aeson alternatives based on common mentions on social networks and blogs.
-
streaming
An optimized general monad transformer for streaming applications, with a simple prelude of functions
InfluxDB - Purpose built for real-time analytics at any scale.
Do you think we are missing an alternative of roundtrip-aeson or a related project?
README
Roundtrip Aeson
roundtrip allows you to write invertible syntax descriptions -- or, to put it another way, a parser and pretty printer combined -- for String or XML data. This package extends this to support constructing and destructing JSON documents.
Example
Using roundtrip-aeson
is relatively straightforward:
Define your data type;
Define partial isomorphisms for the constructors (probably using the template haskell);
Describe the syntax of its JSON representation; and
Use that representation to build and parse JSON.
import Data.Aeson.RoundTrip
data Invoice
= Unpaid Bool Integer Bool
| Paid Double
deriving (Show)
defineIsomorphisms ''Invoice
invoiceSyntax :: JsonSyntax s => s Invoice
invoiceSyntax =
unpaid
<$> jsonField "overdue" jsonBool
<*> jsonField "total" jsonIntegral
<*> jsonField "warned" jsonBool
<|> paid
<$> jsonField "total" jsonRealFrac
main :: IO ()
main = do
-- Build a JSON representation.
let Right x = runBuilder invoiceSyntax $ Unpaid False 40 [False]
L.putStrLn $ encode x
-- Parse a JSON representation.
print $ runParser invoiceSyntax x
See tests/demo.hs for the complete source of this example.