这是我的解码器:
decodeData : Json.Decoder (Id, String)
decodeData =
Json.at ["data", "0"]
<| Json.object2 (,)
("id" := Json.int)
("label" := Json.string)
id
逻辑上应为Int
,但我的后端会将其作为String
发送(例如,我们会"1"
而不是1
)。
如何将解码后的值转换为Int
?
答案 0 :(得分:6)
...并回答自己:)我在这个Flickr示例中找到了解决方案
decodeData : Json.Decoder (Id, String)
decodeData =
let number =
Json.oneOf [ Json.int, Json.customDecoder Json.string String.toInt ]
in
Json.at ["data", "0"]
<| Json.object2 (,)
("id" := number)
("label" := Json.string)
答案 1 :(得分:0)
答案 2 :(得分:0)
已验证的答案已过时。这是榆木0.19的答案:
dataDecoder : Decoder Data
dataDecoder =
Decode.map2 Data
(Decode.field "id" (Decode.string |> Decode.andThen stringToIntDecoder))
(Decode.field "label" Decode.string)
stringToIntDecoder : String -> Decoder Int
stringToIntDecoder year =
case String.toInt year of
Just value ->
Decode.succeed value
Nothing ->
Decode.fail "Invalid integer"