Initial commit
This commit is contained in:
commit
e11d6f11e4
34
Json.hs
Normal file
34
Json.hs
Normal file
@ -0,0 +1,34 @@
|
||||
module Json where
|
||||
|
||||
import Data.Aeson
|
||||
import Data.Aeson.Types (parse)
|
||||
import Data.Text (Text, unpack)
|
||||
import Data.List (intercalate)
|
||||
|
||||
import qualified Data.Vector as V
|
||||
import qualified Data.HashMap.Strict as H
|
||||
|
||||
-- Get the JSON value of a key
|
||||
(|.) :: Object -> Text -> Value
|
||||
obj |. key = case parse (.: key) obj of
|
||||
Success val -> val
|
||||
Error err -> toJSON err
|
||||
|
||||
-- Get the String value of a key
|
||||
(|:) :: Object -> Text -> String
|
||||
obj |: key = repr (obj |. key) 0
|
||||
|
||||
-- Create a String representation of a JSON Value
|
||||
repr :: Value -> Int -> String
|
||||
repr val lev =
|
||||
case val of
|
||||
Array x -> intercalate ", " $ mapl (\i -> repr i lev) x
|
||||
Object x -> concat $ map (dump x) $ H.keys x
|
||||
String x -> unpack x
|
||||
Number x -> show x
|
||||
Bool x -> show x
|
||||
Null -> "null"
|
||||
where
|
||||
indent = '\n' : (concat . replicate lev) " "
|
||||
dump o k = concat [indent, unpack k, ": ", repr (o |. k) (lev+1)]
|
||||
mapl f v = V.toList $ V.map f v
|
Loading…
Reference in New Issue
Block a user