@hackage highjson0.2.0.0
Very fast JSON serialisation and parsing library
Categories
License
MIT
Maintainer
Alexander Thiemann <mail@athiemann.net>
Links
Versions
Deprecated
Dependencies (11)
- attoparsec >=0.13.0.0
- base >=4.7 && <5
- buffer-builder >=0.2.4
- bytestring >=0.10.4.0
- containers
- hashable >=1.1.2 Show all…
Dependents (2)
@hackage/highjson-th, @hackage/highjson-swagger
highjson
Intro
Hackage: highjson
Low boilerplate, easy to use and very fast Haskell JSON serialisation and parsing. WARNING: Work in progress!
Usage
{-# LANGUAGE OverloadedStrings #-}
data SomeDummy
= SomeDummy
{ sd_int :: Int
, sd_bool :: Bool
, sd_text :: T.Text
, sd_either :: Either Bool T.Text
, sd_maybe :: Maybe Int
} deriving (Show, Eq)
someDummySpec =
JsonSpec SomeDummy $
"int" .= sd_int
:+: "bool" .= sd_bool
:+: "text" .= sd_text
:+: "either" .= sd_either
:+: "maybe" .=? sd_maybe
:+: EmptySpec
instance ToJson SomeDummy where
toJson = makeSerialiser someDummySpec
instance JsonReadable SomeDummy where
readJson = makeParser someDummySpec
test =
parseJsonBs "{\"int\": 34, \"text\": \"Teext\", \"bool\": true, \"either\": false}"
== Right (SomeDummy 34 True "Teext" (Left False) Nothing)
For more usage examples check the tests.
Install
- Using cabal:
cabal install highjson - From Source:
git clone https://github.com/agrafix/highjson.git && cd highjson && cabal install
Todo
- Implement proper string parsing (handle escape charaters)
- Write more tests
- Generate typescript interfaces from object specs
- ...
Benchmarks
To run the benchmarks, use cabal bench. Current results on my MacBook Pro:
$ cabal bench
Preprocessing library highjson-0.1.0.0...
[1 of 1] Compiling Data.Json.Parser ( src/Data/Json/Parser.hs, dist/build/Data/Json/Parser.o )
In-place registering highjson-0.1.0.0...
Preprocessing benchmark 'highjson-benchmarks' for highjson-0.1.0.0...
[1 of 1] Compiling Main ( bench/Twitter.hs, dist/build/highjson-benchmarks/highjson-benchmarks-tmp/Main.o ) [Data.Json.Parser changed]
Linking dist/build/highjson-benchmarks/highjson-benchmarks ...
Running 1 benchmarks...
Benchmark highjson-benchmarks: RUNNING...
benchmarking twitter/aeson
time 2.200 ms (2.044 ms .. 2.349 ms)
0.983 R² (0.975 R² .. 0.996 R²)
mean 2.065 ms (2.031 ms .. 2.120 ms)
std dev 138.3 μs (93.40 μs .. 204.8 μs)
variance introduced by outliers: 48% (moderately inflated)
benchmarking twitter/highjson
time 2.058 ms (2.032 ms .. 2.087 ms)
0.997 R² (0.994 R² .. 0.999 R²)
mean 2.077 ms (2.050 ms .. 2.115 ms)
std dev 103.6 μs (80.86 μs .. 138.0 μs)
variance introduced by outliers: 35% (moderately inflated)
The benchmarks are derived from aeson's twitter-json-parsing benchmarks and should probably more there when this library is in a more complete state.