用 Aeson 解析顶级值

Parse top-level value with Aeson

我正在尝试使用 Aeson 解析 JSON 值,并且(到目前为止)解析对象或数组没有问题,但我无法让 Aeson 解析 JSON 文档只是字符串。

据我所知,由于 RFC 7159 值是合法的 JSON 文档,而且 Aeson 从 0.9.0.0 开始就支持它(我使用的是 0.9.0.1),所以它应该可以工作。例如,我将一个 API 和 returns 字符串作为其许多调用的顶级 JSON 文档进行包装,并希望对这些字符串进行新类型化以确保某些静态类型安全:

newtype Bar = Bar String deriving (Eq, Show)
instance FromJSON Bar where
    parseJSON (String v) = pure (Bar $ T.unpack v)
    parseJSON _ = mzero

如果我尝试解码某些东西:

decode "JustSomeRandomString" :: Maybe Bar

我得到的只是 return 中的 Nothing

知道我做错了什么吗?当然,我可以在没有 Aeson 的情况下处理 API 调用 return 字符串作为 JSON 文档,但我希望保持统一!

尝试decode "\"JustSomeRandomString\"" :: Maybe Bar