Elixir JSON parsing with descriptive failures
Elixir
defmodule JsonParse do
def parse(text) when is_binary(text) do
try do
{:ok, :json.decode(text)}
rescue
error ->
{:error, "invalid JSON: #{Exception.message(error)}"}
end
end
def parse_object!(text) do
case parse(text) do
{:ok, value} when is_map(value) -> value
{:ok, value} -> raise ArgumentError, "expected object, got #{inspect(value)}"
{:error, reason} -> raise ArgumentError, reason
end
end
end