我正在努力寻找正确的方法来完成我的解码器。我从以下格式的数据开始:
[{_id:'interests', [{obj1}, {obj1}]}
,{_id:'countries', [{obj2}, {...}]}
,{_id:'sections', [{obj3}, {...}]}]
我想要到达一个
解码器摘要
。type alias Summary =
{ sections : List Section
, interests : List Interest
, countries : List Country
}
到目前为止,我能够得到的最好输出是这样的:
[ Interests (List Interest), Countries (List Country), Sections (List Section)]
但仍需要一些脆弱的模式匹配(依赖于数组的一致顺序,因此在 0.16 版本中存在很大问题)。为此,我使用
summaryItemDecoder : String -> Decoder SummaryInfo
summaryItemDecoder item =
let dec =
case item of
"sections" -> Json.map Sections sectionsDecoder
"interests" -> Json.map Interests interestsDecoder
"countries" -> Json.map Countries countriesDecoder
in ("data" := dec)
listSummaryDecoder : Decoder (List SummaryInfo)
listSummaryDecoder =
("_id" := string) `Json.andThen` summaryItemDecoder
|> list
完整代码在这里。感激一些最后的提示。