data() :: json | json_value
json() :: %{optional(String.t) => json_value}
json_value :: nil | true | false | list | float | integer | String.t | %{}