我在Haskell中定义了以下数据类型对象:
import GHC.Generics
import Data.Aeson
import qualified Data.ByteString.Lazy.Char8 as C
import Data.Maybe (fromJust)
data DLA = DLA {
a::String,
b::Int,
c::Int,
d::String,
e::[Int]
} deriving (Show, Generic)
instance FromJSON DLA
instance ToJSON DLA
并以以下格式从某些前端应用程序接收json数组
[\"hello\",3,2,\"world\",[1,3,5]]
当我尝试像这样解析
decode $ C.pack "[\"hello\",3,2,\"world\",[1,3,5]]"::Maybe DLA
它只是返回了Nothing
。尝试像
decode $ C.pack "[\"hello\",3,2,\"world\",[1,3,5]]"::Maybe Value
返回以下输出:
Just (Array [String "hello",Number 3.0,Number 2.0,String "world",Array [Number 1.0,Number 3.0,Number 5.0]])
所以问题似乎在于Haskell将字符串解释为数组,而不是对象,因此正确地引发了异常。任何想法如何解决这一问题?
我正在使用ghc和ghci的当前版本以及Data.Aeson。
答案 0 :(得分:1)
我找到了一个使用模式匹配的简单解决方案,但是也欢迎使用更直接的方法,因为我认为应该有一些功能。
raw = fromJust (decode $ C.pack "[\"hello\",3,2,\"world\",[1,3,5]]"::Maybe (String, Int, Int, String, [Int]))
func::(String, Int, Int, String, [Int]) -> DLA
func (a,b,c,d,e) = DLA a b c d e