我正在尝试将时间戳(例如:“1493287973015”)从 JSON 转换为日期类型。
到目前为止,我创建了这个自定义解码器:
stringToDate : Decoder String -> Decoder Date
stringToDate decoder =
customDecoder decoder Date.fromTime
但它不起作用,因为它返回的是结果,而不是日期:
Function `customDecoder` is expecting the 2nd argument to be:
Time.Time -> Result String a
But it is:
Time.Time -> Date.Date
有没有办法进行转换?
假设您的 JSON 实际上将数值放在引号内(意味着您正在解析 JSON 值"1493287973015"
并不是1493287973015
),你的解码器可能看起来像这样:
import Json.Decode exposing (..)
import Date
import String
stringToDate : Decoder Date.Date
stringToDate =
string
|> andThen (\val ->
case String.toFloat val of
Err err -> fail err
Ok ms -> succeed <| Date.fromTime ms)
请注意stringToDate
没有传递任何参数,这与您尝试传递一个的示例相反Decoder String
作为参数。这并不是解码器的工作原理。
相反,这可以通过构建更原始的解码器来完成,在这种情况下,我们从解码器开始string from Json.Decode http://package.elm-lang.org/packages/elm-lang/core/latest/Json-Decode#string.
The andThen
然后,部分获取解码器给出的字符串值,并尝试将其解析为浮点数。如果它是有效的Float
,它被送入Date.fromTime
,否则就是失败。
The fail http://package.elm-lang.org/packages/elm-lang/core/latest/Json-Decode#fail and succeed http://package.elm-lang.org/packages/elm-lang/core/latest/Json-Decode#succeed函数将您正在处理的正常值包装成Decoder Date.Date
上下文,以便可以返回它们。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)