У меня проблема с анализом тега в следующей структуре JSON. Парсер работает только тогда, когда я заявляю, что это tags :: !Array
Он терпит неудачу, когда я объявляю его tags :: [Tag]
Haskell Aeson вложенная матрица JSON
Почему?
{
"response": {
"status": "ok",
"results": [
{
"type": "article",
"fields": {
"wordcount": "497"
},
"tags": [
{
"id": "profile/barryglendenning"
}
]
}
]
}
}
data Field = Field{
wordcount :: Int
} deriving (Show)
instance FromJSON Field where
parseJSON (Object o) = Field <$> (o .: "wordcount")
parseJSON _ = mzero
data Tag = Tag{
id :: Text
} deriving (Show)
instance FromJSON Tag where
parseJSON (Object o) = Tag <$> (o .: "id")
parseJSON _ = mzero
data SearchResult = SearchResult {
type:: Text,
field :: Field,
tags :: !Array
} deriving (Show)
instance FromJSON SearchResult where
parseJSON (Object o) = do
let t1 = o .: "type"
let t2 = o .: "fields"
let t3 = o .: "tags"
SearchResult <$> t1 <*> t2 <*> t3
parseJSON _ = mzero
data ContentrResult = ContentrResult {
results :: [SearchResult],
status :: Text
} deriving (Show)
instance FromJSON ContentrResult where
parseJSON (Object o) = do
r <- o .: "response"
ContentrResult <$> r .: "results"
<*> r .: "status"
parseJSON _ = mzero
Какова точная ошибка, которую вы получаете? – user2847643
Это, вероятно, не имеет ничего общего с вашей проблемой, но я бы не назвал поле записи 'id', потому что тогда у вас была бы двусмысленность с прелюдией. –
Кстати, имя поля 'type' является синтаксической ошибкой –