1

我在 PureScript 中使用 argonaut 库对 JSON 进行解码和编码。我无法编写一个实现来解码和编码这样的 json 字段:

“字段”:[3,“文本”]

这是一个具有不同数据类型的数组。如何在 argonaut 库中实例化它?

4

1 回答 1

3

如果你有固定数量的不同类型的值,这通常(在计算机科学和数学中)称为“元组”,当它们只有两个时有一个特殊的名称——“对”。

JavaScript 没有元组的概念,诚然,在没有静态类型的情况下它没有什么意义。所以传统上 JavaScript 中的元组被编码为数组。

但是 PureScript 确实有这样的概念!在标准库中,它被称为 - 惊喜!- Tuple(然后有不同数量元素的变体 - Tuple3, Tuple4, 等等)

Argonaut 遵循 JavaScript 约定:它将元组编码为数组。因此,如果您只是将字段键入为Tuple Int String,它将起作用:

type MyObj = { field :: Tuple Int String }

x :: Either JsonDecodeError MyObj
x = parseJson "{ \"field\": [3, \"text\"] }" >>= decodeJson

main :: Effect Unit
main = 
  logShow x  -- prints Right { field: Tuple 3 "text" }
于 2021-09-22T20:03:13.467 回答