Немного поиграл с gist API gist, пытаясь разобраться с библиотекой Aeson JSON. У меня возникла проблема со сгенерированным экземпляром ToJSON, и я точно не знаю, как ее решить.
Мне нужно содержать значение внутри, и ключ, связанный со значением, также должен быть значением, а не предопределенным именем ключа. Немного проще показать. Желаемый результат,
{
"public": true,
"description": "Something..",
"files": {"This Thing.md": {"content": "Here we go!"}}
}
где значение имени файла содержит содержимое, но в настоящее время я получаю
{
"public": true,
"description": "Something..",
"files": {"filename": "This Thing.md", "content": "Here we go!"}
}
Что мне совсем не нужно. Текущий код,
{-# LANGUAGE OverloadedStrings, DeriveGeneric #-}
import Data.Text (Text)
import Data.Aeson
import GHC.Generics
data GistContent = GistContent
{ filename :: Text
, content :: Text
} deriving (Show, Generic)
instance ToJSON GistContent
data Gist = Gist
{ description :: Text
, public :: Bool
, files :: GistContent
} deriving (Show, Generic)
instance ToJSON Gist
Если предположить, что это возможно, как моя структура данных должна выглядеть, чтобы получить желаемый результат?.. И если это невозможно с использованием дженериков, как я добился этого с помощью экземпляра ToJSON (я не совсем понимаю вне структуры там тоже)?