- type JFilter = Json -> Jsons
- isObj :: JFilter
- isArr :: JFilter
- isStr :: JFilter
- isStrBy :: (String -> Bool) -> JFilter
- isNum :: JFilter
- isNumBy :: Fractional a => (a -> Bool) -> JFilter
- isBool :: JFilter
- isTrue :: JFilter
- isFalse :: JFilter
- isNull :: JFilter
- isAtomic :: JFilter
- getFromObj :: JFilter
- getFromKey :: String -> JFilter
- getFromKeys :: [String] -> 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
- deep :: JFilter -> JFilter
- deepObj :: JFilter -> JFilter
- deepArr :: JFilter -> JFilter
Data Types
Filtering
isNumBy :: Fractional a => (a -> Bool) -> JFilterSource
Predicative filter JSON numbers.
Get all elements from object.
getFromKey :: String -> JFilterSource
Get elements from object with key.
getFromKeys :: [String] -> JFilterSource
Get elements from object with keys.
Examles:
citys :: Jsons citys = [ "Europa" ==> "Ukraine" ==> ["Kiyv", "Gitomir", "Lviv"], "Asia" ==> "Japan" ==> ["Tokyo"], "Europa" ==> "UK" ==> ["London", "Glasgow"], "Europa" ==> "Germany" ==> ["Berlin", "Bonn"], "America" ==> "USA" ==> ["NewYork"], "America" ==> "Canada" ==> ["Toronto"], "Australia" ==> ["Melburn", "Adelaida"] ] jCitys = foldl unionRecObj emptyObj citys ex1 = pprint jCitys { "America": { "Canada": ["Toronto"], "USA": ["NewYork"] }, "Asia": { "Japan": ["Tokyo"] }, "Australia": ["Melburn", "Adelaida"], "Europa": { "Germany": ["Berlin", "Bonn"], "UK": ["London", "Glasgow"], "Ukraine": ["Kiyv", "Gitomir", "Lviv"] } } query2 = getFromKeys ["Europa", "America", "Atlantida"] ex2 = pprints $ query2 jCitys [ { "Germany": ["Berlin", "Bonn"], "UK": ["London", "Glasgow"], "Ukraine": ["Kiyv", "Gitomir", "Lviv"] },{ "Canada": ["Toronto"], "USA": ["NewYork"] } ]
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.
Filter Combinators
(>>>) :: JFilter -> JFilter -> JFilterSource
(f >>> g)
- Apply filter f, later filter g .
Examples:
query3 = getFromKeys ["Europa", "America"] >>> getFromObj ex3 = pprints $ query3 jCitys
Result:
[ ["Berlin", "Bonn"],["London", "Glasgow"],["Kiyv", "Gitomir", "Lviv"],["Toronto"],["NewYork"] ]
guards :: JFilter -> JFilter -> JFilterSource
(f
- If guards
g )f
returned null then null
else apply g
.
deepArr :: JFilter -> JFilterSource
Tree traversal filter for array.
Example:
-- Query: All city Europa and Australia. -- query31, query32, query33 is equal. query31 = getFromKeys ["Europa", "Australia"] >>> (getFromArr `orElse` getFromObj) >>> (isStr `orElse` getFromArr) ex31 = pprints $ query31 jCitys query32 = getFromKeys ["Europa", "Australia"] >>> (getFromObj `when` isObj) >>> getFromArr ex32 = pprints $ query32 jCitys query33 = getFromKeys ["Europa", "Australia"] >>> deep getFromArr ex33 = pprints $ query33 jCitys
Result:
[ "Berlin","Bonn","London","Glasgow","Kiyv","Gitomir","Lviv","Melburn","Adelaida" ]