Data.JSON2.Query
Contents
Description
- 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" ]