76 lines
1.7 KiB
Elm
76 lines
1.7 KiB
Elm
|
|
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
|
|
fromJSString = Native.fromJSString
|
|
|
|
|
|
-- Extract Elm values from Json values
|
|
|
|
string : String -> Value -> String
|
|
string base v = case v of { String s -> s ; _ -> base }
|
|
|
|
number : Float -> Value -> Float
|
|
number base v = case v of { Number n -> n ; _ -> base }
|
|
|
|
boolean : Bool -> Value -> Bool
|
|
boolean base v = case v of { Boolean b -> b ; _ -> base }
|
|
|
|
array : [Value] -> Value -> [Value]
|
|
array base v = case v of { Array a -> a ; _ -> base }
|
|
|
|
object : Dict String Value -> Value -> Dict String Value
|
|
object base v = case v of { Object o -> o ; _ -> base }
|
|
|
|
|
|
-- Extract Elm values from dictionaries of Json values
|
|
|
|
find get =
|
|
let f base key dict =
|
|
case Dict.lookup key dict of
|
|
Nothing -> base
|
|
Just v -> get base v
|
|
in f
|
|
|
|
findString : String -> Dict String Value -> String
|
|
findString = find string
|
|
|
|
findNumber : Float -> Dict String Value -> Float
|
|
findNumber = find number
|
|
|
|
findBoolean : Bool -> Dict String Value -> Bool
|
|
findBoolean = find boolean
|
|
|
|
findArray : [Value] -> Dict String Value -> [Value]
|
|
findArray = find array
|
|
|
|
findObject : Dict String Value -> Dict String Value -> Dict String Value
|
|
findObject = find object
|