在榆树中解码元组

Decode a tuple in elm

我正在寻找一种方法来解码 elm 中包含两个元素的元组。

[[字符串,布尔]]

外部列表很容易用 Json.list 解析,但如何将数组解码为元组?我尝试了 的解决方案,但我得到的只是关于解码器类型的错误,也许,我假设自该答案以来 elm 发生了一些变化。或者我不知道是否缺少导入。

谢谢

最简单的是

map2 (,) (index 0 string) (index 1 string)

无法将数组转换为元组。

这是因为数组可以是任意长度,而元组是预先确定的长度;在编译时确定。

因此,要执行转换,您需要添加一些约束条件,这当然取决于您的问题域。例如,我可能决定只能转换具有两个元素的数组。像这样:

import Array exposing (Array)

arrayToTuple : Array a -> Maybe (a, a)
arrayToTuple array =
    case Array.toList array of
        (a::b::_) -> Just (a, b)
        _ -> Nothing

由于长度的不同,函数必须return一个Maybe (a, a);或捕获两种可能情况的类似类型。

微妙的问题是:转换是有损,你必须在某些时候考虑到这一点。

例如,您可以在解码器中拒绝不合适的数组,但随后您将不得不考虑解码失败的原因。或者,您可以 捕获 Maybe 中的失败,然后被吸入 Maybe-land。无论哪种方式,您都必须考虑转换失败的可能性。

自 elm 0.19 起使用:

map2 (Tuple.pair) (index 0 string) (index 1 string)

https://github.com/elm/compiler/blob/master/docs/upgrade-instructions/0.19.0.md#changes