JSON typeclasses that know the difference between null and absent fields
ToJson and FromJsonRather than implementing ToJson and FromJson by hand, you can generate them automatically using
ToJson and FromJsonIf you like you can even skip the declaration by mixing in AutoToJson or
AutoFromJson, or importing nrktkt.ninny.Auto._.
You can change the name of a field being read to/from JSON using the @JsonName annotation.
You can change the name of all fields being considered by a typeclass using the preprocess and postprocess methods.
Below is an example of converting a camel cased case class to snake case using guava CaseFormat.
Note that if the renamed typeclass derives from another, like ToJson[Person] does from ToJson[Address], then that dependency type class will still dictate its own naming.
And therefore in this case we can see the address is still camel cased.
{
"first_name": "Jim",
"last_name": "Bob",
"kids": [],
"address": {
"houseNumber": 718,
"street": "Ashbury St."
"zip": "94117",
}
}
To make both use snake case, apply the renaming process to the Address typeclass as well.
If your case class has optional parameters then you can use their default values when a field is absent by importing the feature flag FromJsonAuto.useDefaults in the scope of the derivation for your FromJson.
We don’t usually expect to have null references in Scala. So the default behavior is for null references to be passed to ToJson instances where they could be handled for a specific type.
However if you need to handle null references generally we have NullPointerBehavior.
By providing an instance of NullPointerBehavior in the scope of your ToJson derivation you can control if null references are passed to ToJson instances or if a value is provided instead. NullPointerBehavior.Ignore and IgnorePointerBehavior.WriteNull are provided the typical uses cases.