Próbuję parsować następujący JSON z aesonem.Parsuj JSON z nazwami pól, które zawierają zastrzeżone słowa kluczowe
{
"data": [
{
"id": "34",
"type": "link",
"story": "foo"
},
{
"id": "35",
"type": "link",
"story": "bar"
}
]
}
Ponieważ istnieje wiele pola chciałabym zignorować, wydaje I should use GHC generics. Ale jak napisać definicję typu danych, która używa słów kluczowych Haskella, takich jak data
i type
? Poniższa oczywiście daje: parse error on input `data'
data Feed = Feed {data :: [Post]}
deriving (Show, Generic)
data Post = Post {
id :: String,
type :: String,
story :: String
}
deriving (Show, Generic)
Dzięki, działa ładnie! Czy byłoby również możliwe połączenie tego podejścia z "Generic"? Powiedzmy, że typ 'Post' nie miał atrybutu' type', wydaje się, że nie mogę mieć funkcji 'Post deriving (Generic)' podczas implementowania 'parseJSON'' Feed', a następnie łączyć je jak w pytaniu . – mb21
W końcu zastanawiałem się, czy naprawdę potrzebuję typu danych "Feed", aby pozbyć się atrybutu "data" w JSON lub czy mogę w jakiś sposób dostać się bezpośrednio do Postów. – mb21
@ mb21 [a] ma instancje FromJSON/ToJSON, więc jeśli wszystko, co chcesz zrobić, to serializować listę postów, po prostu zrób to bezpośrednio z 'encode listOfPosts'. Możesz łączyć podejście z Generic, wyprowadzać instancję postu jak każdą inną instancję używając Generic i pisać ręcznie instancję Feed. Po prostu działa. – bennofs