使用 Argonaut 在 PureScript 中解析 JSON
Parse JSON in PureScript with Argonaut
我使用 PureScript 中的 argonaut 库进行解码和编码 JSON。
我无法编写一个实现来解码和编码这样的 json 字段:
"field": [3, "text"]
这是一个具有不同数据类型的数组。
我如何在 argonaut 库中实例化它?
如果你有固定数量的不同类型的值,这通常(在计算机科学和数学中)称为“元组”,当只有两个时有一个特殊的名称 - “对” .
JavaScript 没有元组的概念,诚然,如果没有静态类型,它就毫无意义。所以传统上 JavaScript 中的元组被编码为数组。
但是PureScript确实有这样的概念!在标准库中它被称为 - surprise! - 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" }
我使用 PureScript 中的 argonaut 库进行解码和编码 JSON。 我无法编写一个实现来解码和编码这样的 json 字段:
"field": [3, "text"]
这是一个具有不同数据类型的数组。 我如何在 argonaut 库中实例化它?
如果你有固定数量的不同类型的值,这通常(在计算机科学和数学中)称为“元组”,当只有两个时有一个特殊的名称 - “对” .
JavaScript 没有元组的概念,诚然,如果没有静态类型,它就毫无意义。所以传统上 JavaScript 中的元组被编码为数组。
但是PureScript确实有这样的概念!在标准库中它被称为 - surprise! - 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" }