2

JSONデータを処理しようとするときのhaskellの初心者の質問。

次の内容のkkという名前の単純なファイルがあります。

{
 "id": 123,
 "name": "Test1"
}

そして、次のコードで正常に読み取り、解析しています。

{-# LANGUAGE OverloadedStrings #-}

import Data.Aeson
import Data.Aeson.Types
import Control.Applicative ((<$>), (<*>))
import Control.Monad
import qualified Data.ByteString.Lazy.Char8 as BS

data Test = Test { id       ∷ Integer
                 , name     ∷ String
                 } deriving (Show)


process v = Test <$>
                 (v .: "id")       <*>
                 (v .: "name")


instance FromJSON Test where
  parseJSON (Object o) = process o
  parseJSON (Array  a)  = mzero
  parseJSON _ = mzero

main = do
    src ← readFile "kk"
    let t = decode (BS.pack src) ∷ Maybe Test
    print t

ただし、ファイルが配列である場合、ファイルをどのように処理する必要があるかを判断できないようです。つまり、次のことを意味します。

[{
 "id": 1,
 "name": "Test1"
},
{
 "id": 2,
 "name": "Test2"
}]

配列のケースを折りたたんだり、反復したりするにはどうすればよいですか?

4

1 に答える 1

4

試す

let t = decode (BS.pack src) :: Maybe [Test]
于 2013-01-20T19:16:40.263 に答える