da3      !"#$%&'()*+,-./012This module provides instances FromJson for :  7Json, Maybe, Bool, String, Integr, Int, Double, Float, 5 Maybe UTCTime ,Map String a, List, tuples 2-5 sizes .  Example : 3 fromJson jTable :: [(Double, Maybe String, Bool)] 2 [(1.0, Just "One", False), (2.0, Nothing, True)] This module provides instances ToJson for :  J(), Char, Json, Maybe, Either, Bool, String, Integr, Int, Double, Float, O UTCTime format: UTC YYYY-MM-DD HH:MM:SS , Map String a, List, tuples 2-5 sizes .  Examples : H getCurrentTime >>= print . toJson == JString "2011-01-29 12:12:39 UTC"  & table :: [(Int, Maybe String, Bool)]  table = [  (1, Just "One", False),  (2, Nothing, True)  ]  jTable = toJson table  pprint jTable & [[1, "One", false], [2, null, true]]  Create empty JSON object. DEPRECATED see (). () Eq   . Create JSON object from list. Merge two JSON Objects.  Example: S objA = fromList [("a", toJson "1"), ("r", fromList [("ra", "11"), ("rb", "12")])]  pprint objA  {  "a": "1",  "r": {  "ra": "11",  "rb": "12"  }  } S objB = fromList [("b", toJson "2"), ("r", fromList [("rb", "13"), ("rc", "14")])]  pprint objB  {  "b": "2",  "r": {  "rb": "13",  "rc": "14"  }  }  pprint $ objA `unionObj` objB  {  "a": "1",  "b": "2",  "r": {  "ra": "11",  "rb": "12"  }  }  Merge JSON objects from list. "Recursive merge two JSON Objects.  Example :  objR = objA `unionRecObj` objB  pprint objR  {  "a": "1",  "b": "2",  "r": {  "ra": "11",  "rb": "12",  "rc": "14"  }  } Renders JSON to String. Pretty-prints JSON. 3Pretty-prints JSONs. 4      IConversion SQL-like JSON array to tree-like JSON object with use column. JConversion SQL-like JSON array to tree-like JSON object with use columns. COMPLEX EXAMPLE :  import Database.HDBC  import Database.HDBC.Sqlite3  import Data.JSON2   dbName = "..." " selectSql = "SELECT * from test"   main = do # conn <- connectSqlite3 dbName ' stmtSel <- prepare conn selectSql  execute stmtSel []  q <- sFetchAllRows stmtSel  mapM print q 2 -- [Just "A",Just "1",Just "Pupkin",Just "1"] 3 -- [Just "A",Just "2",Just "Sidorov",Just "2"] 3 -- [Just "B",Just "22",Just "Petrov",Just "3"] 3 -- [Just "B",Just "22",Just "Ivanov",Just "4"] 4 -- [Just "B",Just "22",Just "Golubev",Just "5"] 3 -- [Just "B",Just "33",Just "Petrov",Just "6"] / let json = toJson (q :: [[Maybe String]])  pprint json  -- [ $ -- ["A", "1", "Pupkin", "1"], % -- ["A", "2", "Sidorov", "2"], % -- ["B", "22", "Petrov", "3"], % -- ["B", "22", "Ivanov", "4"], & -- ["B", "22", "Golubev", "5"], $ -- ["B", "33", "Petrov", "6"]  -- ] & let json' = groupWithNCol 2 json  pprint json'  -- {  -- "A": { # -- "1": [["Pupkin", "1"]], # -- "2": [["Sidorov", "2"]]  -- },  -- "B": { G -- "22": [["Petrov", "3"], ["Ivanov", "4"], ["Golubev", "5"]], # -- "33": [["Petrov", "6"]]  -- }  -- }  disconnect conn Filter JSON objects. Filter JSON arrays. Filter JSON strings. !Predicative filter JSON strings. Filter JSON numbers. !Predicative filter JSON numbers. Filter JSON Bool. Filter JSON True. !Filter JSON False. "Filter JSON null. #Filter primitive types. $#Get elements from object with key. %$Get elements from object with keys.  Examles:  citys :: Jsons  citys =  [ @ "Europa" ==> "Ukraine" ==> ["Kiyv", "Gitomir", "Lviv"], . "Asia" ==> "Japan" ==> ["Tokyo"], : "Europa" ==> "UK" ==> ["London", "Glasgow"], 7 "Europa" ==> "Germany" ==> ["Berlin", "Bonn"], 0 "America" ==> "USA" ==> ["NewYork"], 0 "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"]  }  } 9 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 object. 'Get all elements from array. (#Get element from array with index. )&Get elements from array with indexes. *(Get all elements from object and array. + (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"]  ] ,Concat results two filters. -(f - g) - Apply f, if f returned null apply g. .(f . g) - When g returned not null, apply f. /(f / g ) - If f returned null then null else apply g. 0,Tree traversal filter for object and array. 1!Tree traversal filter for array. 2!Tree traversal filter for array.  Example:  , -- Query: All city Europa and Australia. ) -- query31, query32, query33 is equal.  0 query31 = getFromKeys ["Europa", "Australia"] ) >>> (getFromArr `orElse` getFromObj) # >>> (isStr `orElse` getFromArr) ! ex31 = pprints $ query31 jCitys  0 query32 = getFromKeys ["Europa", "Australia"] ! >>> (getFromObj `when` isObj)  >>> getFromArr ! ex32 = pprints $ query32 jCitys  1 query33 = getFromKeys ["Europa", "Australia"]  >>> deep getFromArr ! ex33 = pprints $ query33 jCitys Result:  [ S "Berlin","Bonn","London","Glasgow","Kiyv","Gitomir","Lviv","Melburn","Adelaida"  ]  !"#$%&'()*+,-./012 !"#&$%'()*+,-./012 !"#$%&'()*+,-./0125      !"#$%&'()*+,-./0123456789 json2-0.3.1 Data.JSON2Data.JSON2.FromSQLData.JSON2.QueryFromJsonfromJsonToJsontoJsonJsonsJsonJObjectJArrayJNullJBoolJNumberJStringemptyObj singleObj==>fromListunionObj unionsObj unionRecObjtoStringpprintpprints groupWithCol groupWithNColJFilterisObjisArrisStrisStrByisNumisNumByisBoolisTrueisFalseisNullisAtomic getFromKey getFromKeys getFromObj getFromArr getFromIndexgetFromIndexes getChildern>>><+>orElsewhenguardsdeepdeepObjdeepArrpprint'escJStr