Text.HJson.Query
- type Jsons = [Json]
- type JFilter = Json -> Jsons
- jEmpty :: Json
- jMerge :: Json -> Json -> Json
- jMergeRec :: Json -> Json -> Json
- jMerges :: [Json] -> Json
- jMergesRec :: [Json] -> Json
- isObj :: JFilter
- isArr :: JFilter
- isStr :: JFilter
- isNum :: JFilter
- isBool :: JFilter
- isNull :: JFilter
- isPrimitive :: JFilter
- getFromKey :: String -> JFilter
- getFromKeys :: [String] -> JFilter
- getFromObj :: JFilter
- getFromArr :: JFilter
- getFromIndex :: Int -> JFilter
- getFromIndexes :: [Int] -> JFilter
- getChildern :: JFilter
- (>>>) :: JFilter -> JFilter -> JFilter
- (<+>) :: JFilter -> JFilter -> JFilter
- orElse :: JFilter -> JFilter -> JFilter
- when :: JFilter -> JFilter -> JFilter
- guards :: JFilter -> JFilter -> JFilter
- deepObj :: JFilter -> JFilter
- deepArr :: JFilter -> JFilter
- deep :: JFilter -> JFilter
- debug :: JFilter -> String -> String
Documentation
jMergesRec :: [Json] -> JsonSource
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"]
}
}
filter primitive types
getFromKey :: String -> JFilterSource
get elements from object with key
getFromKeys :: [String] -> JFilterSource
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": []
}
{
}
get all elements from object
get all elements from array
getFromIndex :: Int -> JFilterSource
get element from array with index
getFromIndexes :: [Int] -> JFilterSource
get elements from array with indexes
get all elements from object and array
(>>>) :: JFilter -> JFilter -> JFilterSource
filter combinators
Example:
query2 = query1 >>> getFromObj json2 = query2 merg ex2 = pprint json2
Result:
["Berlin", "Bonn"] ["Kiyv", "Gitomir", "Lviv"] ["London", "Glasgow"] ["Toronto"] []
deep :: JFilter -> JFilterSource
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 |