-- Hoogle documentation, generated by Haddock -- See Hoogle, http://www.haskell.org/hoogle/ -- | library for querying from JSON -- -- library(HXT-like) for querying from JSON @package hjson-query @version 0.4 module Text.HJson.Query type Jsons = [Json] type JFilter = Json -> Jsons -- | create empty JSON object jEmpty :: Json -- | merge two JSON Objects jMerge :: Json -> Json -> Json -- | recursive merge two JSON Objects jMergeRec :: Json -> Json -> Json -- | merge list JSON Objects jMerges :: [Json] -> Json -- | recursive merge lists JSON Objects -- -- Example: -- --
-- import Text.HJson hiding (toString)
-- import Text.HJson.Query
-- import Text.HJson.Pretty
--
-- -- Parse JSON
-- jParse :: String -> Json
-- jParse jstr = case (fromString jstr) of
-- Left l -> error l
-- Right json -> json
--
-- j0 = jParse "{}"
-- j1 = jParse "{\"Europa\": {\"Ukraine\": [\"Kiyv\", \"Gitomir\", \"Lviv\"]}}"
-- j2 = jParse "{\"Asia\": {\"Japan\": [\"Tokyo\"]}}"
-- j3 = jParse "{\"Europa\": {\"UnitedKingdom\": [\"London\", \"Glasgow\"]}}"
-- j4 = jParse "{\"Europa\": {\"Germany\": [\"Berlin\", \"Bonn\"]}}"
-- j5 = jParse "{\"Africa\": {}}"
-- j6 = jParse"{\"America\": {\"USA\": [], \"Canada\": [\"Toronto\"]}}"
-- j7 = jParse "{\"Australia\": [\"Melburn\", \"Adelaida\"]}"
-- merg = jMergesRec [j0, j1, j2, j3, j4, j5, j6, j7]
-- ex0 = putStrLn $ toString " " merg
--
--
-- Result:
--
--
-- {
-- "Africa": {
-- },
-- "America": {
-- "Canada": ["Toronto"],
-- "USA": []
-- },
-- "Asia": {
-- "Japan": ["Tokyo"]
-- },
-- "Australia": ["Melburn", "Adelaida"],
-- "Europa": {
-- "Germany": ["Berlin", "Bonn"],
-- "Ukraine": ["Kiyv", "Gitomir", "Lviv"],
-- "UnitedKingdom": ["London", "Glasgow"]
-- }
-- }
--
jMergesRec :: [Json] -> Json
-- | filter JSON objects
isObj :: JFilter
-- | filter JSON arrays Example
isArr :: JFilter
-- | filter JSON strings
isStr :: JFilter
-- | filter JSON numbers
isNum :: JFilter
-- | filter JSON Bool
isBool :: JFilter
-- | filter JSON null
isNull :: JFilter
-- | filter primitive types
isPrimitive :: JFilter
-- | get elements from object with key
getFromKey :: String -> JFilter
-- | get elements from object with keys
--
-- Example:
--
-- -- pprint js = mapM_ putStrLn $ map (toString " ") js --pretty print ---- --
-- query1 = getFromKeys ["Europa", "America", "Africa"] -- json1 = query1 merg -- ex1 = pprint json1 ---- -- Result: -- --
-- {
-- "Germany": ["Berlin", "Bonn"],
-- "Ukraine": ["Kiyv", "Gitomir", "Lviv"],
-- "UnitedKingdom": ["London", "Glasgow"]
-- }
-- {
-- "Canada": ["Toronto"],
-- "USA": []
-- }
-- {
--
-- }
--
getFromKeys :: [String] -> JFilter
-- | get all elements from object
getFromObj :: JFilter
-- | get all elements from array
getFromArr :: JFilter
-- | get element from array with index
getFromIndex :: Int -> JFilter
-- | get elements from array with indexes
getFromIndexes :: [Int] -> JFilter
-- | get all elements from object and array
getChildern :: JFilter
-- | filter combinators
--
-- Example:
--
-- -- query2 = query1 >>> getFromObj -- json2 = query2 merg -- ex2 = pprint json2 ---- -- Result: -- --
-- ["Berlin", "Bonn"] -- ["Kiyv", "Gitomir", "Lviv"] -- ["London", "Glasgow"] -- ["Toronto"] -- [] --(>>>) :: JFilter -> JFilter -> JFilter -- | filter combinators (<+>) :: JFilter -> JFilter -> JFilter -- | filter combinators orElse :: JFilter -> JFilter -> JFilter -- | filter combinators when :: JFilter -> JFilter -> JFilter -- | filter combinators guards :: JFilter -> JFilter -> JFilter -- | tree traversal filter for object deepObj :: JFilter -> JFilter -- | tree traversal filter for array deepArr :: JFilter -> JFilter -- | tree traversal filter for objects and arrays -- -- Example: -- --
-- -- Qwery: All city Europa, America, Australia and Africa -- -- q31, q32, q33 is equal -- -- q31 = getFromKeys ["Europa", "America", "Africa", "Australia"] -- >>> (getFromArr `orElse` getFromObj) -- >>> (isStr `orElse` getFromArr) -- -- q32 = getFromKeys ["Europa", "America", "Africa", "Australia"] -- >>> (getFromObj `when` isObj) -- >>> getFromArr -- -- q33 = getFromKeys ["Europa", "America", "Africa", "Australia"] -- >>> -- deep getFromArr ---- -- See also: www.haskell.org/haskellwiki/HXT | deep :: JFilter -> JFilter -- | pretty print query from JSON string -- --
-- debug (deep isPrimitive) "[1, [false, true, [null]]]" == "[1, false, true, null]" --debug :: JFilter -> String -> String