{-# LANGUAGE DerivingVia, DataKinds #-} {-# LANGUAGE DeriveGeneric #-} module Main where import Data.Aeson import Deriving.Aeson import Deriving.Aeson.Stock import qualified Data.ByteString.Lazy.Char8 as BL data User = User { userId :: Int , userName :: String , userAPIToken :: Maybe String } deriving Generic deriving (FromJSON, ToJSON) via CustomJSON '[OmitNothingFields, FieldLabelModifier (StripPrefix "user", CamelToSnake)] User data Foo = Foo { fooFoo :: Int, fooBar :: Int } deriving Generic deriving (FromJSON, ToJSON) via Prefixed "foo" Foo testData :: [User] testData = [User 42 "Alice" Nothing, User 43 "Bob" (Just "xyz")] main = do BL.putStrLn $ encode testData BL.putStrLn $ encode $ Foo 0 1