我需要使用一个将float
s表示为string
s *的json源,我不知道该怎么做。
这很容易:
Json.Decode.map String.toFloat Json.Decode.string
但是,这会产生一个Maybe Float
,如果它无法解码该字符串,我希望它完全失败。
(*)的原因是实际数据类型为Decimal,因此“ 1.5”!=“ 1.50”。我的应用程序不必在意。
答案 0 :(得分:4)
您可以安装elm-community/json-extra
并使用Json.Decode.Extra.parseFloat
或仅复制其实现
fromMaybe : String -> Maybe a -> Decode.Decoder a
fromMaybe error val =
case val of
Just v ->
Decode.succeed v
Nothing ->
Decode.fail error
parseFloat : Decode.Decoder Float
parseFloat =
Decode.string |> Decode.andThen (String.toFloat >> fromMaybe "failed to parse as float")
答案 1 :(得分:1)
另一个不需要 fromMaybe
的选项:
floatDecoder : Json.Decoder Float
floatDecoder =
Json.string |> Json.andThen (String.toFloat >> Maybe.withDefault 0.0 >> Json.succeed)
以防万一它对其他人有帮助;)