That doesn't handle custom JSON schemas at all. I don't know much about Elm but at work in Haskell we mostly write FromJSON instances manually. It's probably the same amount of code as the data type definition.
Custom JSON which people invent as they go along is just going to present your system with pain over time.
If you need to manually handle tags, here's a snippet that can help you:
-- | Safely accesses a JSON object where the value at a key is text. It takes an
-- object, a key, and a continuation of what to do when this key is present.
--
-- Example:
--
-- @
-- data D = A | B | C Int
-- instance FromJSON D where
-- parseJSON = withObject "D" $ \o ->
-- o .:=> "tag" $ \case
-- "A" -> pure A
-- "B" -> pure B
-- "C" -> C <$> (o .: "theInt")
-- t -> fail $ "Unrecognized tag in type D: " ++ unpack t
-- @
(.:=>) :: Object -> Text -> (Text -> Parser a) -> Parser a
o .:=> k = \m -> o .: k >>= withText ("Object with mandatory key " <> unpack k) mBut perhaps it wouldn't save much code compared to custom-made parsers.