module Text.JSON.Combinator.Examples where
import Text.JSON.Combinator
import qualified Text.JSON as J
import Text.JSONb
import Text.JSON.Parsec
import Control.Applicative
import qualified Data.ByteString as S
-- | Using both @Text.JSON@ and @Text.JSONb@,
-- then given a file name of a JSON object,
-- go through each field of that object and:
--
-- * If it is a string, reverse it
--
-- * If it is a number, add 1 to it
--
-- * If it is a boolean, invert it
--
-- then pretty-print the result of each of the parsers.
example1 ::
FilePath -- ^ The JSON object file name
-> IO ()
example1 p =
do r1 <- readJSONFile p :: IO (Either String JSON)
r2 <- readJSONFile p :: IO (Either ParseError J.JSValue)
let f r = withObjectFields (
withString r
. withNumber (+1)
. jnot
)
k1 = printJSON . f S.reverse <$> r1
k2 = printJSON . f reverse <$> r2
either print S.putStrLn k1
either print putStrLn k2