用 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
我正在尝试使用 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