Recursive types for values accepted by and decoded from JSON.
@type object() :: %{optional(String.t()) => t()}
@type scalar() :: nil | boolean() | number() | String.t()
@type t() :: scalar() | [t()] | object()