使用 Argonaut 在 PureScript 中解析 JSON

Parse JSON in PureScript with Argonaut

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

"field": [3, "text"]

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

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

JavaScript 没有元组的概念,诚然,如果没有静态类型,它就毫无意义。所以传统上 JavaScript 中的元组被编码为数组。

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

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" }