У меня есть необходимость для декодирования JSON в типа ильма, как показано ниже:Элх комплекс пользовательских JSON декодер
Типа
type User = Anonymous | LoggedIn String
type alias Model =
{ email_id : User
, id : Id
, status : Int
, message : String
, accessToken : AccessToken
}
JSON Сообщения 1
{
"status": 0,
"message": "Error message explaining what happened in server"
}
в значение типа
Model {
"email_id": Anonymous
, id: 0
, status: 0
, message: json.message
, accessToken: ""
}
JSON Сообщение 2
{
"status": 1,
"email_id": "[email protected]"
"token": "asdfaz.adfasggwegwegwe.g4514514ferf"
"id": 234
}
в значение типа
Model {
"email_id": LoggedIn json.email_id
, id: json.id
, status: json.status
, message: ""
, accessToken: json.token
}
Decoder информация
Выше, "сообщение" не всегда присутствует и email_id/идентификатор/маркер всегда не настоящее время.
Как сделать этот тип условного декодирования в вяз
Еще раз спасибо за замечательным решение. Оно работает. Не могли бы вы передать мне некоторые ссылки, чтобы понять, как работает декодер JSON, поскольку кажется немного непонятным, почему здесь используются задачи и 'andThen'. Хотя это очень общая цель, изначально я думал о Задачах как о обещаниях с заданием. –
Еще раз взгляните на ссылку. Он не использует ['Task.andThen'] (http://package.elm-lang.org/packages/elm-lang/core/3.0.0/Task#andThen), он использует функцию того же имя для декодеров Json. Взгляните на оба набора API, и вы увидите другие сходства, такие как 'success' и' fail'. Это связано с основными шаблонами Monad, которые являются общим образцом на функциональных языках, хотя Elm намеренно избегает вызова их Monads, потому что понимание Monads может быть сложным. Вам не нужно понимать Monads для разбора Json. –