将整数数组解码为Elm中的Date

时间:2018-02-03 17:43:44

标签: elm

我试图转换这个json

{ "date": [2018, 2, 3] }

进入这个模型

type alias MyModel = { date: Date }

我知道如何将其解码为列表

decoder = 
   decode MyModel (field "date" (list int))

但我无法弄清楚如何将解码器链接在一起。

1 个答案:

答案 0 :(得分:5)

您可以使用Json.Decode.index提取已知索引的值。您需要索引0,1和2的值,然后您可以将它们转换为字符串,以便在Date.fromString中使用,如下所示:

import Date exposing (Date)
import Html exposing (Html, text)
import Json.Decode exposing (..)

dateDecoder : Decoder Date
dateDecoder =
    let
        toDateString y m d =
            String.join "-" (List.map toString [ y, m, d ])
    in
    map3 toDateString
        (index 0 int)
        (index 1 int)
        (index 2 int)
        |> andThen
            (\str ->
                case Date.fromString str of
                    Ok date ->
                        succeed date

                    Err err ->
                        fail err
            )

你可以像这样使用解码器:

decoder = 
    decode MyModel (field "date" dateDecoder)