Angenommen, Ihre JSON tatsächlich den numerischen Wert in Anführungszeichen setzen (dh Sie die JSON-Wert "1493287973015"
und nicht 1493287973015
parsen), könnte der Decoder wie folgt aussehen:
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)
Beachten Sie, dass stringToDate
doesn‘ Es werden keine Parameter übergeben, im Gegensatz zu Ihrem Beispiel, in dem Sie versucht haben, einen Decoder String
als Parameter zu übergeben. Das ist nicht so, wie Decoder funktionieren.
Stattdessen kann dies durch den Aufbau auf primitiveren Decodern erfolgen, in diesem Fall beginnen wir mit dem Decoder string
from Json.Decode
.
Der andThen
Teil nimmt dann den String-Wert, der vom Decoder angegeben wird, und versucht, es zu einem Float zu analysieren. Wenn es eine gültige Float
ist, wird es in eingegeben, andernfalls ist es ein Fehler.
Die Funktionen fail
und succeed
schließen die normalen Werte, mit denen Sie zu tun haben, in die Kontexte Decoder Date.Date
ein, damit sie zurückgegeben werden können.
Danke! Ich habe es funktioniert. JSON mit Elm zu dekodieren ist nicht gerade einfach. –
Ich würde nicht weit gehen, um zu sagen, dass es nicht _easy_ ist. Es ist nur ungewohnt, wenn Sie aus einem imperativen Hintergrund kommen. Diese Art des Parsens ist in funktionalen Sprachen ziemlich häufig; Es ist bekannt als Parser Combinators. –