elm/libraries/Json.elm

76 lines
1.6 KiB
Elm
Raw Normal View History

module Json where
import Dict
import JavaScript as JS
import Native.Json as Native
data Value
= String String
| Number Float
| Boolean Bool
| Null
| Array [Value]
| Object (Dict String Value)
-- String Converters
toString : Value -> String
toString v = JS.toString (Native.toPrettyJSString "" v)
toPrettyString : String -> Value -> String
toPrettyString sep v = JS.toString (Native.toPrettyJSString sep v)
toJSString : Value -> JSString
toJSString v = Native.toPrettyJSString "" v
fromString : String -> Maybe Value
fromString s = Native.fromJSString (JS.fromString s)
fromJSString : JSString -> Maybe Value
-- Extract Elm values from Json values
2013-03-10 08:54:37 +00:00
string : Value -> String
string v = case v of { String s -> s ; _ -> "" }
2013-03-10 08:54:37 +00:00
number : Value -> Float
number v = case v of { Number n -> n ; _ -> 0 }
2013-03-10 08:54:37 +00:00
boolean : Value -> Bool
boolean v = case v of { Boolean b -> b ; _ -> False }
2013-03-10 08:54:37 +00:00
array : Value -> [Value]
array v = case v of { Array a -> a ; _ -> [] }
2013-03-10 08:54:37 +00:00
object : Value -> Dict String Value
object v = case v of { Object o -> o ; _ -> Dict.empty }
-- Extract Elm values from dictionaries of Json values
2013-03-10 08:54:37 +00:00
find get base =
let f key dict =
case Dict.lookup key dict of
Nothing -> base
2013-03-10 08:54:37 +00:00
Just v -> get v
in f
findString : String -> Dict String Value -> String
2013-03-10 08:54:37 +00:00
findString = find string ""
2013-03-10 08:54:37 +00:00
findNumber : String -> Dict String Value -> Float
findNumber = find number 0
2013-03-10 08:54:37 +00:00
findBoolean : String -> Dict String Value -> Bool
findBoolean = find boolean False
2013-03-10 08:54:37 +00:00
findArray : String -> Dict String Value -> [Value]
findArray = find array []
2013-03-10 08:54:37 +00:00
findObject : String -> Dict String Value -> Dict String Value
findObject = find object Dict.empty