aeson-casing-0.2.0.0: Tools to change the formatting of field names in Aeson instances.

Safe Haskell | None
Language | Haskell2010

Data.Aeson.Casing

Description

The casing utilities allow you to specify how Aeson renders and parses the field names in JSON messages. Snake, Camel, and Pascal case are all supported. To include casing modifiers in Aeson, attach options to instances of ToJSON and FromJSON.

    data Person = Person
           { personFirstName :: Text
           , personLastName  :: Text
           } deriving (Generic)

    instance ToJSON Person where
       toJSON = genericToJSON $ aesonPrefix snakeCase
    instance FromJSON Person where
       parseJSON = genericParseJSON $ aesonPrefix snakeCase

The above code will produce JSON messages like the following...

    {
       "first_name": "John",
       "last_name": "Doe"
    }

Synopsis

- aesonDrop :: Int -> (String -> String) -> Options
- aesonPrefix :: (String -> String) -> Options
- snakeCase :: String -> String
- trainCase :: String -> String
- camelCase :: String -> String
- pascalCase :: String -> String

# Documentation

aesonDrop :: Int -> (String -> String) -> Options Source #

Creates an Aeson options object that drops a specific number of characters from the front of a field name, then applies a casing function.

aesonPrefix :: (String -> String) -> Options Source #

Creates an Aeson options object that drops the field name prefix from a field, then applies a casing function. We assume a convention of the prefix always being lower case, and the first letter of the actual field name being uppercase. This accommodated for field names in GHC 7.8 and below.

    data Person = Person
           { personFirstName :: Text
           , personLastName  :: Text
           } deriving (Generic)

    data Dog = Dog
           { dogFirstName :: Text
           } deriving (Generic)

In the above cases, dog and person are always dropped from the JSON field names.

snakeCase :: String -> String Source #

Snake casing, where the words are always lower case and separated by an underscore.

trainCase :: String -> String Source #

Train casing, where the words are always lower case and separated by a hyphen

camelCase :: String -> String Source #

Camel casing, where the words are separated by the first letter of each word being a capital. However, the first letter of the field is never a capital.

pascalCase :: String -> String Source #

Pascal casing, where the words are separated by the first letter of each word being a capital. The first letter of the field is always a capital.