我正在Haskell中开发一个JSON数据编码器!(更具体地说,我正在尝试将Jo移植到Haskell中!)。我已经做了很多工作,但是我遇到了一个小问题。我将在这里尽量简洁地提出我的问题,我已经尝试尽可能地去除不必要的上下文。
目标:给定一个String
,构造一个Value
。
这些字符串来自命令行:用户以<key>=<value>
的形式输入键/值对,将它们拆分后,剩下的是String
,它是未知类型的值数据。
示例案例:
let s = "someString" -- use the `String` constructor
let s = "1234" -- use the `Number` constructor
let s = "True" -- use the `Bool` constructor
问题:如何推断s
的内容是String
,而不是Number
、Bool
等?
这是Aeson Value
类型的相关类型+构造函数(为简洁起见进行了编辑)。
data Value = Object Object
| Array Array
| String Text
| Number Scientific
| Bool Bool
| Null
1条答案
按热度按时间c3frrgcw1#
既然你已经在使用 aeson 包了,你就可以使用decode,因为
Value
也是一个ByteString
示例:请注意(正如 * n.1.8e9-where 's-my-share m.* 在注解中指出的),字符串必须用引号引起来。
那么,你可以做的就是把你的未知值用引号括起来,然后尝试解析它,然后再尝试解析一次,不要用引号括起来。
现在有两个
Maybe Value
值。选择第一个Just
值(并准备处理Nothing
情况)。