如何在 Json.Decoder 中从 String 转换为 Int
How to convert from String to Int in Json.Decoder
这是我的解码器:
decodeData : Json.Decoder (Id, String)
decodeData =
Json.at ["data", "0"]
<| Json.object2 (,)
("id" := Json.int)
("label" := Json.string)
id
逻辑上应该是 Int
,但是我的后端将它发送为 String
(例如,我们得到 "1"
而不是 1
)。
如何将解码后的值转换为 Int
?
...然后自己回答 :) 我在这个 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)
在 Elm-0.18
decodeString parseInt """ "123" """
这是tutorial about custom decoders, like for date. Reuse fromResult
方法。
经过验证的答案已过时。这是 Elm 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"
这是我的解码器:
decodeData : Json.Decoder (Id, String)
decodeData =
Json.at ["data", "0"]
<| Json.object2 (,)
("id" := Json.int)
("label" := Json.string)
id
逻辑上应该是 Int
,但是我的后端将它发送为 String
(例如,我们得到 "1"
而不是 1
)。
如何将解码后的值转换为 Int
?
...然后自己回答 :) 我在这个 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)
在 Elm-0.18
decodeString parseInt """ "123" """
这是tutorial about custom decoders, like for date. Reuse fromResult
方法。
经过验证的答案已过时。这是 Elm 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"