我正在使用强烈推荐的Aeson软件包,但是我需要解析整数。我想做类似的事情:
decode "5" :: Maybe Int
并获取结果,但是正如文档所解释的那样(http://hackage.haskell.org/package/aeson-0.8.0.0/docs/Data-Aeson.html),Aeson不支持解析简单类型(精妙的主意!) :
>>> decode (encode (1 :: Int)) :: Maybe Int
Nothing
参考您使用值解析器而不是json解析器,但是没有指示如何实际使用该解析器。如果您查看解码源,您会发现Aeson在内部具有带解析器的encodeWith选项,但对您而言是隐藏的。似乎可以导入Data.Attoparsec并运行它parse value "5"
,但是我也很难从中获得有意义的结果。
这将不起作用,因为JSON不支持1
作为有效的JSON文档,有效的JSON唯一的顶级值是对象和数组。您可以通过在值周围放置方括号并将其解码为Int
s列表来轻松解决此问题:
> decode "[1]" :: Maybe [Int]
Just [1]
该decode
函数仅将JSON文档转换为Haskell值,而不仅仅是将JSON值转换为Haskell值。您可以在以下文档中看到此内容json
:
解析顶级JSON值。根据RFC 4627,它必须是对象或数组。
但是,要value
使用Data.Attoparsec
和来实际使用解析器Data.Aeson.Parser
:
> parseOnly value "1"
Right (Number 1.0)
通过简单的模式匹配,您可以将该值提取为一个Data.Scientific.Scientific
值,Aeson将其用作数字类型。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句