如何从JSON访问元素并在haskell中使用此元素创建新列表

时间:2015-06-06 00:11:29

标签: json list object haskell aeson

我有这个数据结构来从Haskell中的JSON获取结果,使用aeson

通过以下网址:http://fipeapi.appspot.com/api/1/carros/marcas.json

data Marca =
  Marca { keyM  :: String
         , idM   :: Int
         , fipe_nameM        :: String
         , nameM :: String
           } deriving Show

instance FromJSON Marca where 
    parseJSON (Object m) =
        Marca <$> m .: "key"
              <*> m .: "id"
              <*> m .: "fipe_name"
              <*> m .: "name"
    parseJSON _= mzero

这工作正常,我将结果存储在名为“ps”

的“Marca”列表中
main :: IO ()
main = do
    d <- (eitherDecode <$> getJSON) :: IO (Either String [Marca])
    case d of
        Left err -> putStrLn err 
        Right ps -> print ps
    return();

现在我必须从这个“ps”创建一个Int列表,其中包含来自每个“Marca”的所有“idM”,但我不知道如何做到这一点,我尝试了一些类似的事情:

Right ps -> let newlist = [idM x | x <- ps]
Right ps -> let newlist = [idM x | x <- [Marca]]

Right ps -> let newlist = map (idM x) ps
Right ps -> let newlist = map (idM x) [Marca]

但它不起作用。

0 个答案:

没有答案