Я получаю данные JSON, используя httpLbs, и читаю их
import qualified Data.ByteString.Lazy.UTF8 as LB
sendSimpleRequest :: Credentials -> IO LB.ByteString
sendSimpleRequest creds = do
<...>
let request = applyBasicAuth user pass $ fromJust $ parseUrl url
manager <- newManager tlsManagerSettings
response <- httpLbs request manager
return $ responseBody response
После этого я могу распечатать результат с помощью putStr . LB.toString
и получить "summary":"Обсуждение рабочих вопросов"
.
Однако, когда я пытаюсь использовать decode
aeson
, чтобы поместить это значение в data
и распечатать его
data Fields = Fields
{ fi_summary :: String
} deriving (Show, Generic)
instance FromJSON Fields where parseJSON = genericParseJSON parseOptions
instance ToJSON Fields where toJSON = genericToJSON parseOptions
parseOptions :: Options
parseOptions = defaultOptions { fieldLabelModifier = drop 3 }
parseAndShow = putStr . show . fromJust . decode
Я получаю экранированные символы: Fields {fi_summary = "\1054\1073\1089\1091\1078\1076\1077\1085\1080\1077 \1088\1072\1073\1086\1095\1080\1093 \1074\1086\1087\1088\1086\1089\1086\1074"}
Похоже, мне нужно настроить aeson
, чтобы правильно поместить ByteString
в String
, но я не хочу сам реализовывать экземпляр FromJSON
, потому что у меня есть еще дюжина структур, подобных data Fields
. Изменение типа fi_summary
также возможно, но пока мне не повезло.