将 JSON 数组正确解析为自定义数据类型对象

Correctly Parsing a JSON Array as Custom Data Type Object

我在 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 为此。

我找到了一个使用模式匹配非常简单的解决方案,但也欢迎使用更直接的方法,因为我相信应该有一些功能。

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