榆树从json响应更新模型

时间:2016-01-03 20:48:39

标签: json elm

我遇到了通过我的某个操作从JSON响应更新模型的问题。 这是设置:

我的模型看起来像这样:

ddply(df, .(id1), function(x) { wilcox.test(x~id2, data=x, paired=FALSE)$p.value })

  id1        V1
1   1 0.3095238
2   2 1.0000000
3   3 0.8412698
4   4 0.6904762
5   5 0.3095238

所述模型的解码器:

type alias Model =
  { totals: Totals.Total // all values are initialized as 0 or 0.0
  }

-- In other module

type alias Total =
  { days : Int
  , avgPerDay: Float
  , reports : Int
  , people : Int
  , locations : Int
  , totalCoffees : Int
  , coffeesPerDay: Float
  }

要更新模型,将调用以下Http请求:

decodeTotal : Json.Decoder Total
decodeTotal =
  object7 Total
      ("days" := Json.int)
      ("avgPerDay" := Json.float)
      ("reports" := Json.int)
      ("people" := Json.int)
      ("locations" := Json.int)
      ("totalCoffees" := Json.int)
      ("coffeesPerDay" := Json.float)

来自服务器的响应是200 OK,使用此正文:getTotals : Effects Action getTotals = Http.get Totals.decodeTotal ("/reports/totals") |> Task.toMaybe |> Task.map TotalsFetched |> Effects.task

然而,在{"days":347,"reports":1793,"avgPerDay":5.167147,"people":205,"locations":332,"coffees":146,"coffeesPerDay":0.42074928}动作中:

TotalsFetched

我假设update : Action -> Model -> (Model, Effects Action) update action model = case action of TotalsFetched totals -> log (toString totals) -- logs Nothing ( { model | totals = Maybe.withDefault model.totals totals } , Effects.none ) totals,我的模型就像Nothing

中描述的那样停留

我不明白为什么Maybe.withDefault是Nothing而不是来自服务器的Decoded响应。这是我的第一个榆树项目,所以如果我遗漏了一些对训练有素的眼睛显而易见的东西,我不会感到惊讶。

1 个答案:

答案 0 :(得分:1)

当你的解码器正在寻找coffees时,你的json正在返回一个名为totalCoffees的字段。

您可能需要考虑使用Task.toResult而不是Task.toMaybe,因为这会在出现问题时收到错误消息。