我正在寻找一种方法来解码榆树中含有两个元素的元组。
[[String,Bool]]
外部列表很容易用Json.list解析,但是如何将数组解码为元组?我尝试了来自Decode a JSON tuple to Elm tuple的解决方案,但我得到的只是关于Decoder和Maybe的类型的错误,我假设自从那个答案后榆树发生了变化。或许我错过了一个导入,我不知道。
由于
答案 0 :(得分:4)
最简单的是
map2 (,) (index 0 string) (index 1 string)
答案 1 :(得分:1)
没有办法将数组一般转换为元组。
这是因为数组可以是任意长度,而元组是预定长度的;在编译时确定。
因此,要执行转换,您需要添加一些约束,这当然将取决于您的问题域。例如,我可以决定只能转换具有两个元素的数组。像这样:
import Array exposing (Array)
arrayToTuple : Array a -> Maybe (a, a)
arrayToTuple array =
case Array.toList array of
(a::b::_) -> Just (a, b)
_ -> Nothing
由于长度不同,函数必须返回Maybe (a, a)
;或类似的类型,捕获两种可能的情况。
微妙的问题是:转换有损,您必须在某个时候考虑到这一点。
例如,您可以在解码器中拒绝不合适的数组,但是您必须考虑解码失败。或者,您可以捕获 Maybe
中的失败,并被吸入Maybe
- 土地。无论哪种方式,您都必须考虑转换失败的可能性。
答案 2 :(得分:0)
自榆树0.19起使用:
map2 (Tuple.pair) (index 0 string) (index 1 string)
https://github.com/elm/compiler/blob/master/upgrade-docs/0.19.md#functions-changed