Определите типы, которые вы хотите десериализовать, например:
{-# LANGUAGE DeriveGeneric #-}
module Q53251928 where
import Data.Aeson
import GHC.Generics
data Item = Item { ndbno :: String } deriving (Eq, Show, Generic)
instance FromJSON Item
data FoodStuff = FoodStuff { item :: [Item] } deriving (Eq, Show, Generic)
instance FromJSON FoodStuff
data RootJSON = RootJSON { list :: FoodStuff } deriving (Eq, Show, Generic)
instance FromJSON RootJSON
Эти типы являются минимальными типами, необходимыми для доступа ко всем значениям ndbno
. Вы можете добавить другие метки к типам для захвата других данных, например, group
, start
, end
и т. Д.
Я скачал файл по ссылке и попытался декодировать его из GHCi, который работал нормально:
*Q53251928 Q53251928> decodeFileStrict "download.json" :: IO (Maybe RootJSON)
Just (RootJSON {list = FoodStuff {item = [Item {ndbno = "45044170"},
Item {ndbno = "45044169"},Item {ndbno = "45287938"},Item {ndbno = "45314045"},
Item {ndbno = "45036851"},Item {ndbno = "45036824"},Item {ndbno = "45198766"},
Item {ndbno = "45270526"},Item {ndbno = "45270516"},Item {ndbno = "45374956"},
Item {ndbno = "45215370"},Item {ndbno = "45225694"},Item {ndbno = "45225696"},
Item {ndbno = "45217133"},Item {ndbno = "45053881"},Item {ndbno = "45270521"},
Item {ndbno = "45226407"},Item {ndbno = "45218344"},Item {ndbno = "45225703"},
Item {ndbno = "45335760"},Item {ndbno = "45221588"},Item {ndbno = "45193027"},
Item {ndbno = "45194338"},Item {ndbno = "45194331"},Item {ndbno = "45256801"}]}})